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