import interface ReadingOwner; external atom ReadingJobObject id "atom:reading:job"; external interface ReadingReader revision "interface:reading:reader@1"; type FeatureData = record {name:string;processor:string;style:string;reveal:string;generation:string;scope:string;color:string;enabled:bool;configRevision:uint32;}; interface ReadingFeature id "interface:reading:feature" revision "interface:reading:feature@1" { queryable relation authoring id "reading:feature:authoring" : optional-one atom ReadingJobObject {resolve id "reading:feature:authoring:resolve" execution snapshot;connect id "reading:feature:authoring:connect" execution transaction;} operation setEnabled id "reading:feature:set-enabled" : bool -> unit {call id "reading:feature:set-enabled:call" execution transaction;} queryable relation reader id "reading:feature:reader" : optional-one interface ReadingReader {resolve id "reading:feature:reader:resolve" execution snapshot;connect id "reading:feature:reader:connect" execution transaction;} queryable value data id "reading:feature:data" : FeatureData {get id "reading:feature:data:get" execution snapshot;} value processorRevision id "reading:feature:processor-revision" : string {get id "reading:feature:processor-revision:get" execution snapshot;} queryable value options id "reading:feature:options" : string {get id "reading:feature:options:get" execution snapshot;} operation configureOptions id "reading:feature:configure-options" : record {expectedRevision:uint32;options:string;} -> unit {call id "reading:feature:configure-options:call" execution transaction;} queryable relation library id "reading:feature:library" : exactly-one interface ReadingOwner {resolve id "reading:feature:library:resolve" execution snapshot;} operation configure id "reading:feature:configure" : record {expectedRevision:uint32;name:string;style:string;reveal:string;generation:string;scope:string;color:string;enabled:bool;} -> unit {call id "reading:feature:configure:call" execution transaction;} operation remove id "reading:feature:remove" : unit -> unit {call id "reading:feature:remove:call" execution transaction;} }