Развернуть Может быть значения из вложенных записей - PullRequest
0 голосов
/ 13 июня 2018

У меня есть ряд вложенных записей информации о конфигурации в PureScript, которые я хочу передать в функцию JavaScript.Эти записи в основном состоят из Maybe -типных значений.Есть ли способ, которым я могу сериализовать это для объектов JavaScript, которые пропускают Nothing -значные методы и разворачивают Just -значные методы?

Я сделал снимок при записиэто в JavaScript с использованием полухаккированных instanceof проверок, но это было очень болезненно, например, потому что нет простого способа остановить рекурсию (я не могу отличить мои записи от случайных других объектов JavaScript).Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 15 июня 2018

Вы можете использовать genericEncodeJson из Data.Argonaut и установить флаг omitNothingFields на true.Этот флаг делает именно то, что вы ожидаете.

module Main where

import Prelude

import Control.Monad.Eff.Console (logShow)
import Data.Argonaut.Generic.Aeson (options)
import Data.Argonaut.Generic.Encode (Options(..), genericEncodeJson)
import Data.Generic (class Generic)
import Data.Maybe (Maybe(..))

data TheRecord = TheRecord { a :: Maybe Int, b :: Maybe String, c :: String }
derive instance gRecord :: Generic TheRecord

main = 
    -- Prints {"c":"Always here","a":42}
    logShow $ genericEncodeJson (Options o { omitNothingFields = true }) rec
    where
        rec = TheRecord { a: Just 42, b: Nothing, c: "Always here" }
        Options o = options
0 голосов
/ 13 июня 2018

Один из вариантов - использовать пакет purescript-nullable.Вы можете превратить Maybe значения в Nullable значения, используя toNullable :: forall a. Maybe a -> Nullable a.Результирующее представление времени выполнения подходит для передачи функциям JavaScript, поскольку toNullable (Just value) становится value во время выполнения и toNullable Nothing становится null во время выполнения.

Другой вариант - использовать purescript-simple-json пакет.Вы можете использовать функцию write :: forall a. WriteForeign a => a -> Foreign, чтобы превратить запись со значениями Maybe в запись, где Just value заменяется на value, а Nothing заменяется на undefined.Этот подход должен быть более простым для вашего случая использования вложенных записей со значениями Maybe.

...