///|
fn main raise {
  // Original synthetic dissemination response: one dataset dimension, one series dimension.
  let response : Json = {
    "meta": {
      "id": "open-data",
      "prepared": "2026-10-23T00:00:00Z",
      "sender": { "id": "DEMO" },
    },
    "data": {
      "structures": [
        {
          "links": [
            {
              "urn": "urn:sdmx:org.sdmx.infomodel.datastructure.Dataflow=DEMO:LABOUR(1.0)",
              "rel": "dataflow",
            },
          ],
          "dimensions": {
            "dataSet": [
              {
                "id": "FREQ",
                "keyPosition": 0,
                "values": [{ "id": "M", "name": "Monthly" }],
              },
            ],
            "series": [
              {
                "id": "REGION",
                "keyPosition": 1,
                "values": [
                  { "id": "N", "name": "North" },
                  { "id": "S", "name": "South" },
                ],
              },
            ],
            "observation": [
              {
                "id": "PERIOD",
                "roles": ["TIME_PERIOD"],
                "keyPosition": 2,
                "values": [
                  { "id": "2026-01", "name": "January" },
                  { "id": "2026-02", "name": "February" },
                ],
              },
            ],
          },
          "attributes": {
            "dataSet": [
              {
                "id": "UNIT",
                "relationship": { "dataflow": {} },
                "values": [{ "id": "PCT", "name": "Percent" }],
                "default": "PCT",
              },
            ],
            "observation": [
              {
                "id": "STATUS",
                "relationship": { "observation": {} },
                "values": [{ "id": "E", "name": "Estimated" }],
              },
            ],
          },
          "annotations": [
            { "id": "PROVISIONAL", "text": "Synthetic provisional series" },
          ],
        },
      ],
      "dataSets": [
        {
          "series": {
            "0": {
              "annotations": [0],
              "observations": { "0": [0, 0], "1": [null] },
            },
            "1": { "observations": { "0": [4.25], "1": [4.00, 0] } },
          },
        },
      ],
    },
  }
  let message = @sdmx.decode_json2(response.stringify())
  let data = message.dataset()
  assert_eq(data.structure().time_index(), Some(2))
  data.validate_frequency("FREQ")
  assert_eq(data.get(["M", "N", "2026-01"]).unwrap().measures()[0], Some("0"))
  assert_eq(data.get(["M", "N", "2026-02"]).unwrap().measures()[0], None)
  assert_eq(message.annotations_for(["M", "N", "2026-01"]).length(), 1)
  let selected = data.select(
    @sdmx.Selection::new(data.structure(), [("REGION", ["N"])]),
  )
  assert_eq(selected.length(), 2)
  let january = selected.periods_contained(
    @sdmx.PeriodWindow::new(
      @sdmx.PeriodValue::parse("2026-01"),
      @sdmx.PeriodValue::parse("2026-01"),
    ),
  )
  assert_eq(january.length(), 1)
  let refused = try {
    ignore(message.encode_csv2())
    false
  } catch {
    _ => true
  }
  assert_true(refused)
  let restored = @sdmx.decode_json2(
    message.encode_json2(
      id="dashboard",
      sender="DEMO",
      prepared="2026-10-23T00:00:00Z",
    ),
  )
  assert_eq(
    restored.dataset().sorted().observations(),
    data.sorted().observations(),
  )
  println(
    "open-data: 4 observations, null/zero preserved, time role recognized, inherited unit and notes preserved; January North = 0 PCT",
  )
}