Spec-Zone.ru › Nim 1

marshal

Этот модуль содержит процедуры для сериализации и десериализации произвольных данных Nim. Формат сериализации использует JSON.

Ограничение: Для объектов их тип не сериализуется. Это означает, что он не будет работать, если объект имеет другой тип во время выполнения, чем тип во время компиляции.

Основное использование

type
  A = object of RootObj
  B = object of A
    f: int

var
  a: ref A
  b: ref B

new(b)
a = b
echo($$a[]) # produces "{}", not "{f: 0}"

# unmarshal
let c = to[B]("""{"f": 2}""")
assert typeof(c) is B
assert c.f == 2

# marshal
let s = $$c
assert s == """{"f": 2}"""

Примечание: Операции to и $$ доступны во время компиляции!

См. также

  • модуль streams
  • модуль json

Импорты

streams, typeinfo, json, intsets, tables, unicode

Процедуры

proc load[T](s: Stream; data: var T)
Загружает data из потока s. Вызывает IOError в случае ошибки.

Пример:

import marshal, streams
var s = newStringStream("[1, 3, 5]")
var a: array[3, int]
load(s, a)
assert a == [1, 3, 5]
Исходный код Редактировать
proc store[T](s: Stream; data: T)
Сохраняет data в поток s. Вызывает IOError в случае ошибки.

Пример:

import marshal, streams
var s = newStringStream("")
var a = [1, 3, 5]
store(s, a)
s.setPosition(0)
assert s.readAll() == "[1, 3, 5]"
Исходный код Редактировать
proc `$$`[T](x: T): string

Возвращает строковое представление x (сериализация, маршаллинг).

Примечание: для сериализации x в JSON используйте $(%x) из модуля json.

Пример:

type
  Foo = object
    id: int
    bar: string
let x = Foo(id: 1, bar: "baz")
## serialize:
let y = $$x
assert y == """{"id": 1, "bar": "baz"}"""
Исходный код Редактировать
proc to[T](data: string): T
Читает данные и преобразует их в тип T (десериализация, унмаршаллинг).

Пример:

type
  Foo = object
    id: int
    bar: string
let y = """{"id": 1, "bar": "baz"}"""
assert typeof(y) is string
## deserialize to type 'Foo':
let z = y.to[:Foo]
assert typeof(z) is Foo
assert z.id == 1
assert z.bar == "baz"
Исходный код Редактировать

© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/marshal.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API