From 55fab35073fb68e8699eb3e23cd9de66efc447d5 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 1 Apr 2021 20:31:08 +0200 Subject: [PATCH] Schema Bundles --- .../packages/schema/src/gen/schema.ts | 68 ++++++++++++++++++- schema/schema.bin | 3 +- schema/schema.prs | 3 + 3 files changed, 70 insertions(+), 4 deletions(-) diff --git a/implementations/javascript/packages/schema/src/gen/schema.ts b/implementations/javascript/packages/schema/src/gen/schema.ts index 2840fdc..f130c8c 100644 --- a/implementations/javascript/packages/schema/src/gen/schema.ts +++ b/implementations/javascript/packages/schema/src/gen/schema.ts @@ -11,6 +11,7 @@ export const $Symbol = Symbol.for("Symbol"); export const $and = Symbol.for("and"); export const $any = Symbol.for("any"); export const $atom = Symbol.for("atom"); +export const $bundle = Symbol.for("bundle"); export const $definitions = Symbol.for("definitions"); export const $dict = Symbol.for("dict"); export const $dictof = Symbol.for("dictof"); @@ -25,12 +26,16 @@ export const $setof = Symbol.for("setof"); export const $tuple = Symbol.for("tuple"); export const $tuple$STAR$ = Symbol.for("tuple*"); export const $version = Symbol.for("version"); -export const __lit5 = false; +export const __lit6 = false; export type _ptr = never; export type _val = _.Value<_ptr>; +export type Bundle = {"modules": Modules}; + +export type Modules = _.KeyedDictionary; + export type Schema = {"version": Version, "pointer": PointerName, "definitions": Definitions}; export type Version = null; @@ -112,6 +117,10 @@ export type ModulePath = Array; export const _toPtr = () => { throw new _.DecodeError("Pointers forbidden"); }; +export function Bundle(modules: Modules): Bundle {return {"modules": modules};} + +export function Modules(value: _.KeyedDictionary): Modules {return value;} + export function Schema( {version, pointer, definitions}: {version: Version, pointer: PointerName, definitions: Definitions} ): Schema {return {"version": version, "pointer": pointer, "definitions": definitions};} @@ -189,6 +198,59 @@ export function Ref({module, name}: {module: ModulePath, name: symbol}): Ref {re export function ModulePath(value: Array): ModulePath {return value;} +export function asBundle(v: _val): Bundle { + let result = toBundle(v); + if (result === void 0) throw new TypeError(`Invalid Bundle: ${_.stringify(v)}`); + return result; +} + +export function toBundle(v: _val): undefined | Bundle { + let result: undefined | Bundle; + if (_.Record.isRecord<_val, _.Tuple<_val>, _ptr>(v)) { + let _tmp0: (null) | undefined; + _tmp0 = _.is(v.label, $bundle) ? null : void 0; + if (_tmp0 !== void 0) { + let _tmp1: (Modules) | undefined; + _tmp1 = toModules(v[0]); + if (_tmp1 !== void 0) {result = {"modules": _tmp1};}; + }; + }; + return result; +} + +export function fromBundle(_v: Bundle): _val {return _.Record($bundle, [fromModules(_v["modules"])]);} + +export function asModules(v: _val): Modules { + let result = toModules(v); + if (result === void 0) throw new TypeError(`Invalid Modules: ${_.stringify(v)}`); + return result; +} + +export function toModules(v: _val): undefined | Modules { + let _tmp0: (_.KeyedDictionary) | undefined; + let result: undefined | Modules; + if (_.Dictionary.isDictionary<_ptr>(v)) { + _tmp0 = new _.KeyedDictionary(); + for (const [_tmp2, _tmp1] of v) { + let _tmp3: (ModulePath) | undefined; + _tmp3 = toModulePath(_tmp2); + if (_tmp3 !== void 0) { + let _tmp4: (Schema) | undefined; + _tmp4 = toSchema(_tmp1); + if (_tmp4 !== void 0) {_tmp0.set(_tmp3, _tmp4); continue;}; + }; + _tmp0 = void 0; + break; + }; + if (_tmp0 !== void 0) {result = _tmp0;}; + }; + return result; +} + +export function fromModules(_v: Modules): _val { + return new _.Dictionary<_ptr>(_.Array.from(_v.entries()).map(([k, v]) => [fromModulePath(k), fromSchema(v)])); +} + export function asSchema(v: _val): Schema { let result = toSchema(v); if (result === void 0) throw new TypeError(`Invalid Schema: ${_.stringify(v)}`); @@ -272,14 +334,14 @@ export function toPointerName(v: _val): undefined | PointerName { if (_tmp0 !== void 0) {result = {"_variant": "Ref", "value": _tmp0};}; if (result === void 0) { let _tmp1: (null) | undefined; - _tmp1 = _.is(v, __lit5) ? null : void 0; + _tmp1 = _.is(v, __lit6) ? null : void 0; if (_tmp1 !== void 0) {result = {"_variant": "false"};}; }; return result; } export function fromPointerName(_v: PointerName): _val { - switch (_v._variant) {case "Ref": {return fromRef(_v.value);}; case "false": {return __lit5;};}; + switch (_v._variant) {case "Ref": {return fromRef(_v.value);}; case "false": {return __lit6;};}; } export function asDefinitions(v: _val): Definitions { diff --git a/schema/schema.bin b/schema/schema.bin index 1027128..7642b06 100644 --- a/schema/schema.bin +++ b/schema/schema.bin @@ -1,5 +1,6 @@ ´³schema·³pointer€³version‘³ definitions·³Ref´³rec´³lit³ref„´³tupleµ´³named³module´³refµ„³ -ModulePath„„´³named³name´³atom³Symbol„„„„„³Schema´³rec´³lit³schema„´³tupleµ´³dict·³pointer´³refµ„³ PointerName„³version´³refµ„³Version„³ definitions´³refµ„³ Definitions„„„„„„³Pattern´³orµµ± SimplePattern´³refµ„³ SimplePattern„„µ±CompoundPattern´³refµ„³CompoundPattern„„„„³Version´³lit‘„³AtomKind´³orµµ±Boolean´³lit³Boolean„„µ±Float´³lit³Float„„µ±Double´³lit³Double„„µ± SignedInteger´³lit³ SignedInteger„„µ±String´³lit³String„„µ± +ModulePath„„´³named³name´³atom³Symbol„„„„„³Bundle´³rec´³lit³bundle„´³tupleµ´³named³modules´³refµ„³Modules„„„„„³Schema´³rec´³lit³schema„´³tupleµ´³dict·³pointer´³refµ„³ PointerName„³version´³refµ„³Version„³ definitions´³refµ„³ Definitions„„„„„„³Modules´³dictof´³refµ„³ +ModulePath„´³refµ„³Schema„„³Pattern´³orµµ± SimplePattern´³refµ„³ SimplePattern„„µ±CompoundPattern´³refµ„³CompoundPattern„„„„³Version´³lit‘„³AtomKind´³orµµ±Boolean´³lit³Boolean„„µ±Float´³lit³Float„„µ±Double´³lit³Double„„µ± SignedInteger´³lit³ SignedInteger„„µ±String´³lit³String„„µ± ByteString´³lit³ ByteString„„µ±Symbol´³lit³Symbol„„„„³ Definition´³orµµ±or´³rec´³lit³or„´³tupleµ´³tuple*µ´³named³pattern´³refµ„³NamedAlternative„„„´³named³patterns´³refµ„³NamedAlternative„„„„„„„µ± Alternative´³refµ„³ Alternative„„„„³ diff --git a/schema/schema.prs b/schema/schema.prs index 49e8b6b..2ee45dd 100644 --- a/schema/schema.prs +++ b/schema/schema.prs @@ -2,6 +2,9 @@ version 1 . +Bundle = . +Modules = { ModulePath: Schema ...:... }. + Schema =