When writing API for machine-check, there are some concerns regarding the ergonomics:
Repeated arbitrary string
Arbitrary strings in the SwarmTypeProtocol transition properties are prone to error, especially typos.
While target and source states cannot be non-arbitrary strings without any significant change, writing a role and cmd can be omitted.
sidenote: This, however, would be a non-problem if eventually machine-check codes will be autogenerated.
cmd name must match the implemented MachineProtocol
There does not seem to be any point in ensuring that cmd name matches the implemented MachineProtocol.
cmd name is neither persisted in Actyx nor used in any transition calculation.
It is used only for function naming purposes, which should be irrelevant to the well-formed ness of a machine-runner MachineProtocol,
Possible Solution
Replace role field with MachineProtocol
machine-check understands the types exposed by machine-runner.
Therefore machine-check knows how to extract createJSONForAnalysis and subsequently the subscriptions of each machines.
This solves repeated arbitrary string issue for role.
Use builder pattern to collect events and define states before defining the transitions
SwarmProtocolInteractionDesign
.build(ProtocolEvents.All, [
"Initial",
"Docking",
"DockedAndWaitingForWater",
"WaterDrawn"
])
.transition(
"Initial",
pump.machine,
[ProtocolEvents.DockAvailable.type],
"Docking"
)
.transition(
"Docking",
robot.machine,
[ProtocolEvents.RobotIsDocked.type],
"DockedAndWaitingForWater"
)
.transition(
"DockedAndWaitingForWater",
pump.machine,
[ProtocolEvents.WaterSupplied.type],
"WaterDrawn"
)
.transition(
"WaterDrawn",
robot.machine,
[ProtocolEvents.RobotIsUndocked.type],
"Undocked"
)
.roleInitial(robot.machine, robot._1_WaitingForDock)
.roleInitial(pump.machine, pump._1_Initial)
.finish()
.test()
// at this point:
// 1. all roles have initials figured out
// 2. test suite can figure out the subscriptions
// 3. test suite can test each role's projections
Remove cmd checking in the rust code
This solves cmd name must match the implemented MachineProtocol
When writing API for
machine-check
, there are some concerns regarding the ergonomics:Repeated arbitrary string
Arbitrary strings in the
SwarmTypeProtocol
transition properties are prone to error, especially typos. Whiletarget
andsource
states cannot be non-arbitrary strings without any significant change, writing arole
andcmd
can be omitted.sidenote: This, however, would be a non-problem if eventually
machine-check
codes will be autogenerated.cmd
name must match the implementedMachineProtocol
There does not seem to be any point in ensuring that
cmd
name matches the implementedMachineProtocol
.cmd
name is neither persisted in Actyx nor used in any transition calculation. It is used only for function naming purposes, which should be irrelevant to the well-formed ness of a machine-runnerMachineProtocol
,Possible Solution
Replace
role
field with MachineProtocolmachine-check
understands the types exposed bymachine-runner
. Thereforemachine-check
knows how to extractcreateJSONForAnalysis
and subsequently the subscriptions of each machines. This solves repeated arbitrary string issue forrole
.Use builder pattern to collect events and define states before defining the transitions
Remove
cmd
checking in the rust codeThis solves
cmd
name must match the implementedMachineProtocol