@0x80d4a09e28022edb;

using CSharp = import "../programming_language/csharp.capnp";
$CSharp.namespace("FabAccessAPI.Schema");

using import "../traits.capnp".TraitSuper;
using import "../traits.capnp".TraitError;
using import "../utils.capnp".Fallible;
using import "../utils.capnp".L10NString;

# OID for this trait: 1.3.6.1.4.1.61783.612.1.3
#                                   │    │  │ │
#                       RLKM UG PEN ╯    │  │ │
#                                        │  │ │
#                      FabAccess subtree ╯  │ │
#                                           │ │
#                                    Traits ╯ │
#                                             │
#                                   Checkable ╯

interface TraitCheckable extends (TraitSuper) {
    getState @0 () -> StateCheckable;
    turnOn @1 () -> Fallible(TraitCheckable, TraitError(StateCheckable));
    turnOff @2 () -> Fallible(TraitCheckable, TraitError(StateCheckable));
    giveBack @3 () -> Fallible(TraitCheckable, TraitError(StateCheckable));
    accept @4 () -> Fallible(TraitCheckable, TraitError(StateCheckable));
    reject @5 ( reason :Text, reason_lang :Text ) -> Fallible(TraitCheckable, TraitError(StateCheckable));
}

struct StateCheckable {
    union {
        off @0 :Void;
        on @1 :Void;
        check @2 :Void;
        rejected @3 :L10NString;
    }
}