oadr3

What this is

An attempt to parse the OpenADR 3 API spec. to Gleam using the OAS decoder and generator.

Example of usage:

Collect program information on California electricity prices from the Grid Coordination price server.

import gleam/http
import gleam/http/request
import gleam/json
import gleam/option.{None, Some}
import midas/effect as e
import oadr3
import oadr3/runner

pub fn main() {
  let assert e.Done(Ok(Ok(programs))) =
    runner.run(oadr3.search_all_programs(
      base_request(None),
      targets: None,
      skip: None,
      limit: Some(10),
    ))
  let assert [program1, ..] = programs
  let #(object_meta_data, program_request) = program1
  echo program_request.payload_descriptors
  echo program_request.program_name
  echo object_meta_data.id

  let assert e.Done(Ok(Ok(events))) =
    runner.run(oadr3.search_all_events(
      base_request(None),
      Some(object_meta_data.id),
      None,
      None,
      Some(1),
      None,
    ))
  echo events
}

/// Create the basic request url and accept header
fn base_request(_token: a) -> request.Request(BitArray) {
  request.new()
  |> request.set_host("price.grid-coordination.energy")
  |> request.set_scheme(http.Https)
  |> request.set_path("/openadr3/3.1.0")
  |> request.set_body(<<>>)
}

Development

The gen_oadr3.gleam module is located in the dev directory when cloned from the github repository.

To generate new oas schema and operations from openadr3.yaml specification:

gleam run -m gen_oadr3 
Search Document