# Models

`cargo check --no-default-features --features macros`

Как сделать интерфейс для получения значения из БД и его хранения в памяти? Если просто сериализовать и десериализовать структуры

Это модуль используется в нескольких вариантах:
- для хранения данных, используемых в wasm
- для хранения данных, используемых непосредственно в rust - для непроверенных данных
- для хранения данных, используемых в butterfly, данные динамические ???

В принципе первый и последний пункты можно объединить (wasm и динамические данные)

Для использования в rust - мы будем использовать растовые структуры данных как информацию о типах?
Если да, 1) то нужно хранить старую и новую структуру для миграций и писать функцию миграции для каждой
записи в БД. Если нет, 2) использовать схему для описания информации о типах и написать функции сериализации и десериализации в структуры rust, написать методы запроса значения поля записи, установки значения поля записи.
Написать метод кастинга типа данных к соответствующему типу rust. Кастование будет с проверкой типа данных в рантайме и без проверки типа данных (будет паника если тип данных не верный).

В БД данные могут храниться без инфомации о типе, но в памяти (когда извлекли данные из БД) мы ведь можем хранить тип данных для второго случая из примеров выше?

По сути можно не писать обратные миграции, а в случае ошибки запустить последнюю успешную версию до устранения ошибки миграции.

Мы можем использовать hashmap в no_std с помощью библиотек hashbrown и rustc-hash.

## Зачем схема данных

Смысл хранения схемы данных в том, что wasm модуль (или песочница или контейнер) гарантирует следование некой схеме передаваемых данных. Чтобы в случае чего можно было распарсить эти данные без кода этого модуля. А так же переносимость данных между разными реализациями контейнеров, в том числе на разных языках программирования.
