Serialización

La serialización (serialization) es una operación mediante la cual se convierte un objeto de datos en un formato para su almacenamiento o transmisión. En Dogma, hay soporte integrado para JSON.

JSON

El objeto json dispone de operaciones para convertir datos a formato JSON y de formato JSON:

#devuelve el valor indicado en formato JSON
fn json.encode(val): text

#devuelve el valor de un texto en formato JSON
fn json.decode(text): any

Ejemplos:

json.encode({x=1, y=2})           #devuelve: {"x":1,"y":2}
json.decode("""{"x":1,"y":2}""")  #devuelve: {x=1, y=2}

Serialización a JSON

Las estructuras pueden tener un método con el que convertir una instancia de la estructura a formato JSON. Este método de instancia debe anotarse como @json y @encode y debe devolver una texto con la instancia en formato JSON. Ejemplo:

struct Ejemplo
  @json @encode
  pub fn toJson() -> serialized: text
    #...

Cada vez que invocamos a json.encode(), se solicitará la serialización al método de instancia anterior.

A su vez, las estructuras también pueden disponer de una función, estática implícitamente, que crea una instancia de la estructura a partir de un texto en formato JSON. En este caso, usar las anotaciones @json y @decode:

struct Ejemplo
  @json @decode
  pub fn fromJSON(serialized: text) -> instance: Ejemplo
    #...

Para obtener una instancia de una estructura a partir de una texto en formato JSON, usar el siguiente formato:

json.decode<Tipo>(textoEnFormatoJSON)

Si el tipo indicado no define la función estática @json @decode, la función usa el comportamiento estándar de json.decode() y, a continuación, le asigna como tipo el indicado.