@scala_ru

Страница 935 из 1499
Юрий
15.09.2017
07:57:40
что, например? https://github.com/pureconfig/pureconfig/blob/2278666eec3e6236dcf192ecf99665a44a54a377/docs/example.md вполне норм
Мне как-то потребовалось sealed trait замапить на конфиг нестандартным путём. Если флажок true, то бери кусок настроек и мапь в одного наследника. Если false, то ничего не бери и мапь в другого. Так вот - такое сделать вообще непросто

Andry
15.09.2017
07:57:40
Леха это пять!

Google
Юрий
15.09.2017
08:01:14
да. Кейс простой - опциональный паблишинг в кафку. Если включен - то будь добр дай настройки для кафки. Если выключен - то ничего не надо.

Юрий
15.09.2017
08:04:47
на деле там кучу вещей нужно руками разбирать

Alexey
15.09.2017
08:05:42
с тайп классами вроде отлично такое разбирается

тот же ficus

Oleksandr
15.09.2017
08:06:09
Alexey
15.09.2017
08:07:58
implicit def configWithFlag(implicit yourFlag: YourFlag): Reader[ConfigWithFlag] = ???

Oleg
15.09.2017
08:18:35
чото маловато параметров у ридера

Alexey
15.09.2017
08:28:27
ну эт жи пример

Юрий
15.09.2017
08:31:57
ну эт жи пример
Ну а сам разбор и выбор всё равно же нужно где-то организовывать

Google
Юрий
15.09.2017
08:32:14
и мне нужен ридер для родительского трейта

Alexey
15.09.2017
08:32:20
ифчик Оо

лан это всё обсуждение в воздух без конкретики :)

Oleg
15.09.2017
09:11:10
Не поленился расрыть Алексееву идею https://scastie.scala-lang.org/Odomontois/omL2kPCdTxS7sYtYTuJg3A/2

Юрий
15.09.2017
09:18:09
чёт я не очень понял, как это применить к чтению конфига?

Oleg
15.09.2017
09:23:05
Ну читать один конфиг, если есть флаг в скоупе, и другой, если нет

Не об этом вопрос?

Юрий
15.09.2017
09:23:45
а как этот флаг в скоуп попадет?

Oleg
15.09.2017
09:24:18
Импортом, примесью в каком-нибудь кейке или прямым объявлением

Юрий
15.09.2017
09:24:40
так флаг тоже в конфиге

ща покажу код короч

Oleg
15.09.2017
09:25:01
Ну Алексей про имплиситы говорил

Мне реальность не так интересна, как имплиситы

Юрий
15.09.2017
09:26:27
https://gist.github.com/LMnet/87abe3836d3de45593b07aae0005a6ca

вот если получится это накрутить более красиво - я был бы рад этот кошмар выкинуть

Max
15.09.2017
09:33:36
я не совсем в тему скажу - вы все таки про чтение конфигов говорите но разве это нормально? Option(co.get(key)) match { case Some(publishingCv) => case _ => }

и в стандартной библиотеке есть Option(123).toRight()

Юрий
15.09.2017
09:37:24
А что не так?

Max
15.09.2017
09:38:02
ну второй кейс... не выполнится никогда?

Aleksei
15.09.2017
09:39:44
если будет нулл то выполнится

Google
Юрий
15.09.2017
09:39:45
с чего вдруг? если co.get(key) вернет null - то выполнится

там же джавовая либа под капотом с нулами и эксепшенами

Vyatcheslav
15.09.2017
09:40:20
https://github.com/pureconfig/pureconfig#example так у них пример прям такой же. Только конфиг немного иначе будет выглядеть, а-ля: kafka { type = "WithoutPublishing" } kafka { type = "WithPublishing" // other options }

Юрий
15.09.2017
09:40:25
и pureconfig в целом и сделан для того, чтобы всё это завернуть в нормальное апи

Vyatcheslav
15.09.2017
09:41:29
да, так сложнее :D надо подумать

Юрий
15.09.2017
09:41:53
ну и какая сементика у ключа kafka.type? причём со строковым значением

а вот kafka.publishing булевый - сразу понятно, о чём речь

Grigory
15.09.2017
09:42:53
Юрий
15.09.2017
09:43:18
можно флатмапнуть опшоном
Тогда потеряется конкретное место, и ошибка получится не точной

KrivdaTheTriewe
15.09.2017
09:43:46
китайская анимация, бурятские девки
я стал забывать о главном

Grigory
15.09.2017
09:44:03
Самому написать функцию конвертации твоего типа в айзер; но я согласен, что в целом это костыли

Luger
15.09.2017
09:50:47
черт, попалась мне в твитторе реклама scala-ide от пользователя @scala_lang , решил попробовать - а вдруг. скачал , запустил, а там даже sbt из коробки не поддерживается, хм

Юрий
15.09.2017
09:51:16
используя какую либу?
Мы всё еще про pureconfig

Alexey
15.09.2017
09:55:50
бле, какая неудобная либа

Kirill
15.09.2017
09:56:06
Мы всё еще про pureconfig
Зато у тебя почти получился хадукен из кода!

Alexey
15.09.2017
09:57:11
автовывод из кейскласса не стоит того

Юрий
15.09.2017
09:57:53
вообще, не смотря на этот пример, там всё более менее

Alexey
15.09.2017
09:58:05
я в исходники смотрел

Google
Юрий
15.09.2017
09:59:17
ну кстати код из гиста примерно такой же, как в самой либе

то есть там внутри всё примерно также и делается

Alexey
15.09.2017
09:59:45
ficus гораздо приятнее

Юрий
15.09.2017
10:00:22
в фикусе нету конвертации snake-case в camelCase

Alexey
15.09.2017
10:00:58
config.as[Option[Boolean]]("publishing").getOrElse(false) и усё

Юрий
15.09.2017
10:01:33
что, простите?

config.as[Option[Boolean]]("publishing").getOrElse(false) и усё
ну так это на всё придется писать. Если конфиг большой, то это гемор

Alexey
15.09.2017
10:02:36
гемор на 1 раз и весь код красивый

Option(co.get(key)) match { case Some(publishingCv) => val publishingOpt: Option[Boolean] = publishingCv.unwrapped() match { case x: java.lang.Boolean => Some(x) case x: String => Try(x.toBoolean).toOption case _ => None } вот это полный абзац канешн

Grigory
15.09.2017
10:04:30
в фикусе нету конвертации snake-case в camelCase
https://github.com/iheartradio/ficus/blob/master/src/main/scala/net/ceedubs/ficus/readers/namemappers/HyphenNameMapper.scala

Alexey
15.09.2017
10:04:58
implicit val booleanConfigReader = ConfigReader.fromNonEmptyString[Boolean](catchReadError({ case "yes" | "on" => true case "no" | "off" => false case other => other.toBoolean })) omfg ?

Grigory
15.09.2017
10:05:39
https://github.com/iheartradio/ficus/blob/master/src/main/scala/net/ceedubs/ficus/readers/namemappers/HyphenNameMapper.scala
дефисы более стандартны для хуман ридабл конфигов (имхо офк)

но думаю таким макаром можно определить и снейк кейс конвертер

Юрий
15.09.2017
10:06:35
https://github.com/iheartradio/ficus/blob/master/src/main/scala/net/ceedubs/ficus/readers/namemappers/HyphenNameMapper.scala
Хм, раньше не было. Мы поэтому и переехали на pureconfig

Vyatcheslav
15.09.2017
10:10:28
https://gist.github.com/vsuharnikov/67bace790e3afbc5e1fd592f00a5215f уверен, можно и по-красивше сделать :)

Юрий
15.09.2017
10:14:40
https://gist.github.com/vsuharnikov/67bace790e3afbc5e1fd592f00a5215f уверен, можно и по-красивше сделать :)
А что будет, если не будет ключа? Или если там будет цифра?

Vyatcheslav
15.09.2017
10:16:45
Ну я так, прототип накидал. С такой проверкой код немного усложнится, но суть останется та же: 1. Достаем это булевское значение 2.а. Если true - пытаемся конфиг прочитать как Foo 2.б. Если false - возвращаем Bar

Юрий
15.09.2017
10:18:13
так у меня так и есть. Просто всё это очень развесисто, потому что много проверок, и каждаяя проверка генерит свою ошибку.

Плюс у меня там не только чтение, но и запись

в либе не хватает какого-то middle уровня, где уже не торчит голый typesafe config, но и при этом еще и не высокороуровневое апи

Google
Kirill
15.09.2017
10:37:54
@gurinderu ты, кажется, упоминал datadog. Нормальная штука?

Nick
15.09.2017
10:38:40
нормальная

Алексей
15.09.2017
10:39:02
своих денег стоит ИМХО

Kirill
15.09.2017
10:39:18
какие альтернативы? кроме graphite

Nick
15.09.2017
10:39:47
inluxdata stack

elk

prometeus )

zabbix

nagios

Kirill
15.09.2017
10:40:30
а про такие слышал: granglia/statsD ?

Nick
15.09.2017
10:40:31
да их кароч миллион)

нет

Kirill
15.09.2017
10:40:52
не, у меня то просто есть на выбор несколько, хочу понять что из них норм, а что нет )

Nick
15.09.2017
10:41:14
если платное, то бери собаку и не парься

Алексей
15.09.2017
10:41:23
+1

Kirill
15.09.2017
10:42:09
я бы взял графит, но там getting started меня уже отпугнул своей сложностью установки криваярожа

Алексей
15.09.2017
10:42:19
docker?)

Artem
15.09.2017
10:42:22
docker

Страница 935 из 1499