one-data-model / language

(Old repo:) Simple Definition Format (SDF) for One Data Model definitions
7 stars 4 forks source link

Need ODM SDF Syntax to Cover Product / Resource Stability #66

Open gerickson opened 5 years ago

gerickson commented 5 years ago

In Weave Data Language (WDL), resources (products) may be decorated to indicate their stability and to provide a hint to validation and policy enforcement tooling what rule sets and policies should or should not be enforced.

To be expressed in ODM SDF losslessly, a syntax construct for representing the stability of products (resources) is required.

See related issue https://github.com/one-data-model/language/issues/58

Relevant Example Schema Input Files

Missing or Unmapped WDL-to-ODM SDF Syntax

See related issue https://github.com/one-data-model/language/issues/58

Example Input WDL

message TestNestedIface {
    option (wdl.message_type) = IFACE;

    option (wdl.iface) = {
        stability: ALPHA,
        vendor_id: NEST,
        version: 2
    };

    nest.test.trait.TestATrait trait_x = 1;

    message Implements {
        option (wdl.message_type) = IFACE_IMPLEMENTATIONS;

        nest.test.iface.TestSimpleIface iface_c = 1 [(wdl.implconfig) = {trait_mapping: [{from:"trait_x", to:"trait_y"}]}];
  };
};

message TraitTestResource {
    option (wdl.message_type) = RESOURCE;

    option (wdl.resource) = {
        stability: ALPHA,
        vendor_id: NEST,
        vendor_product_id: 0xFE00,
        version: 2,
        version_map: [
            {
                resource_version: 2,
                trait_version_list: [
                    {name: "nest.test.trait.TestCTrait", version: 2},
                    {name: "nest.test.trait.TestDTrait", version: 2}
                ],
                iface_version_list: [
                    {name: "nest.test.iface.TestVersionedBasicIface", version: 2}
                ]
            }
        ]
    };

    nest.test.trait.TestATrait service_a = 1 [(wdl.traitconfig) = {published_by: EXTERNAL, proxied: false, subscribed: true}];
    nest.test.trait.TestBTrait service_b = 2 [(wdl.traitconfig) = {published_by: EXTERNAL, proxied: false, subscribed: true}];
    nest.test.trait.TestCTrait service_c = 3 [(wdl.traitconfig) = {published_by: EXTERNAL, proxied: false, subscribed: true}];
    nest.test.trait.TestDTrait service_d = 4 [(wdl.traitconfig) = {published_by: EXTERNAL, proxied: false, subscribed: true}];

    nest.test.trait.TestATrait device_a = 5 [(wdl.traitconfig) = {published_by: SELF, proxied: true, subscribed: false}, (wdl.traitinst) = {instance: 1}];
    nest.test.trait.TestBTrait device_b = 6 [(wdl.traitconfig) = {published_by: SELF, proxied: true, subscribed: false}, (wdl.traitinst) = {instance: 1}];
    nest.test.trait.TestCTrait device_c = 7 [(wdl.traitconfig) = {published_by: SELF, proxied: true, subscribed: false}, (wdl.traitinst) = {instance: 1}];
    nest.test.trait.TestDTrait device_d = 8 [(wdl.traitconfig) = {published_by: SELF, proxied: true, subscribed: false}, (wdl.traitinst) = {instance: 1}];

    // For multi-instance testing (e.g commands)
    nest.test.trait.TestATrait device_a2 = 9 [(wdl.traitconfig) = {published_by: SELF, proxied: true, subscribed: false}, (wdl.traitinst) = {instance: 2}];
    nest.test.trait.TestATrait device_a3 = 10 [(wdl.traitconfig) = {published_by: SELF, proxied: true, subscribed: false}, (wdl.traitinst) = {instance: 3}];

    message Implements {
        option (wdl.message_type) = IFACE_IMPLEMENTATIONS;

        nest.test.iface.TestBasicIface iface_1 = 1;

        nest.test.iface.TestNestedIface iface_2 = 2 [(wdl.implconfig) = {trait_mapping: [{from:"service_a", to:"trait_x"}]}];

        nest.test.iface.TestVersionedBasicIface iface_3 = 3 [(wdl.implconfig) = {min_version: 2}];
    };
};

message NestProtectCommonIface {
    option (wdl.message_type) = IFACE;

    option (wdl.iface) = {
        stability: PROD,
        vendor_id: NEST,
        version: 2,
    };

    message Implements {
        option (wdl.message_type) = IFACE_IMPLEMENTATIONS;

        weave.iface.common.DeviceIface device = 1;

        nest.iface.EnhancedPathlightIface enhanced_pathlight = 2 [(wdl.implconfig) = {min_version: 2}];
    };
};