// vim: shiftwidth=4 tabstop=4 noexpandtab package main type Camera struct { statemachine Machine } func NewCamera() Camera { return Camera{ statemachine: Machine{ name: "camera", initial: "idle", states: StateMap{ "idle": MachineState{ on: TransitionMap{ "take_single_picture": MachineTransition{ to: "single_picture", }, }, }, "single_picture": MachineState{ on: TransitionMap{ "single_picture_taken": MachineTransition{ to: "idle", }, }, }, }, api: make(chan string), state_listeners: make([]*(chan string), 0), }, } } func (cam *Camera) run() { cam.statemachine.Run() }