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 Representing Object / Trait Instance Identifiers in Product / Resource Definitions #64

Open gerickson opened 5 years ago

gerickson commented 5 years ago

In Weave Data Language (WDL), resources (products) specify the instances of traits (object) that they implement. Each instance receives a trait instance identifier (defaulting to zero) that uniquely identifies that trait instance in resource (product) paths.

To be expressed in ODM SDF losslessly, a syntax construct for representing trait (object) instance identifiers in resources (products) is required.

Missing or Unmapped WDL-to-ODM SDF Syntax

Relevant Example Schema Input Files

Example Input WDL

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

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

    // TestZIface Traits
    nest.test.trait.TestZTrait trait_one = 1 [(wdl.traitconfig) = {published_by: SELF, proxied: true, subscribed: false},
                                              (wdl.traitinst) = {instance: 0}];

    // Traits
    nest.test.trait.TestZTrait trait_two = 2 [(wdl.traitconfig) = {published_by: SELF, proxied: true, subscribed: false},
                                              (wdl.traitinst) = {instance: 1}];

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

        nest.test.iface.TestZIface iface = 1;
    };
};

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}];
    };
};