Я пытаюсь смоделировать в Purescript тип данных SetOptions
из Firestore.
До сих пор у меня есть следующее
foreign import data FieldPath :: Type
foreign import buildFieldPath :: Array String -> FieldPath
foreign import fieldNames :: FieldPath -> Array String
type MergeFields = Array (String \/ FieldPath)
data SetOptions
= MergeOption Merge
| MergeFieldsOption MergeFields
Обратите внимание, что SetOptions
является типом суммы, поскольку merge
и mergeFields
являются взаимоисключающими (даже если это не задокументировано).
Теперь мне нужно преобразовать SetOptions
в Javascript объект, поэтому что я могу передать его какой-то функции из библиотеки Javascript firebase
.
Это должно быть что-то вроде
{
"mergeFields": [
"foo",
new FieldPath("bar", "baz")
]
}
Моя проблема - тип этого.
Я не могу использовать Object
, поскольку содержащиеся в нем данные не являются однородными (merge
относится к логическим значениям, mergeFields
относится к массивам).
Я могу ' t Json
, потому что мне нужно иметь FieldPath
объектов в результате.
Единственное решение, которое я нашел до сих пор, это вернуть немного Json
и затем javascript сторона разбирает его и добавляет FieldPath
объекты, где это необходимо, но это выглядит грязно и хрупко.