Morphir IR models, JSON codecs and migrations for versions 1 through 4
| Package | Purpose |
|---|---|
| root | Current model, initially v4; follows the latest supported model |
| /json | JSON codecs for the current model |
| /versions/v1 … /versions/v4 | Fixed, distinct models for each major version |
| /versions/v1/json … /versions/v4/json | Fixed-version JSON codecs, including individual nodes |
| /versioned | IRFile union retaining the original version |
| /versioned/json | Dispatch on formatVersion without migrating |
| /migration | to_current and migrate |
| /version | Exact releases, recognition and support checks |
| /common | Names, paths, access and shared data types |
| /wire | Strict JSON parsing and diagnostic codes |
import {
"finos/morphir-ir/versioned/json" @ir_json,
"finos/morphir-ir/migration",
"finos/morphir-ir/version",
"finos/morphir-ir/json" @current_json,
}fn upgrade(text : String) -> String raise {
let original = @ir_json.read(text)
let current = @migration.to_current(original)
@current_json.write(current)
}
fn convert(text : String) -> String raise {
let original = @ir_json.read(text)
let converted = @migration.migrate(
original,
@version.FormatVersion::baseline(3U),
)
@ir_json.write(converted)
}mise run test
# Regenerate tests from vendored fixtures.
mise run ir:fixtures
# Refresh from pinned commits in local upstream clones, then regenerate.
mise run ir:fixtures -- --morphir /path/to/morphir --morphir-elm /path/to/morphir-elmtest {
let map = { 3: "three", 8: "eight", 1: "one" }
@test.assert_eq(map.get(2), None)
@test.assert_eq(map.get(3), Some("three"))
map.set(3, "updated")
@test.assert_eq(map.get(3), Some("updated"))
}test {
let map = { 3: "three", 8: "eight", 1: "one" }
@test.assert_eq(map.get(2), None)
@test.assert_eq(map.get(3), Some("three"))
map.set(3, "updated")
@test.assert_eq(map.get(3), Some("updated"))
}