package fsm import ( "context" "go.uber.org/zap" ) var ( l, _ = zap.NewProduction() ) var CopyPost = Node{ State: "CopyPost", Transitions: map[Event]*Transition{ "HasAttachments": &Transition{ Node: &HasAttachments, Action: func(ctx context.Context) error { return nil }, }, "NoAttachments": &Transition{ Node: &NoAttachments, Action: func(ctx context.Context) error { return nil }, }, }, } var NoteFound = Node{ State: "NoteFound", Transitions: map[Event]*Transition{ "CopyPost": &Transition{ Node: &CopyPost, Action: func(ctx context.Context) error { //TODO: Here's the place to do validation // I had an idea about parsing frontmatter into go structs, // and then writing them out to a NullWriter via protobuf encoding. // this would do schema checking which is nice l := l.Named("NoteFound") note := ctx.Value("note").(string) l.Info("creating post from note", zap.String("filename", note)) // scan for attachments here // if len() attachments > 0 // return nil }, }, }, } var NoAttachments = Node{ State: "NoAttachments", Transitions: map[Event]*Transition{ "Terminate": &Transition{ Node: &Terminate, Action: func(ctx context.Context) error { return nil }, }, }, } var HasAttachments = Node{ State: "HasAttachments", Transitions: map[Event]*Transition{ "CopyAttachments": &Transition{ Node: &CopyAttachments, Action: func(ctx context.Context) error { return nil }, }, }, } var CopyAttachments = Node{ State: "CopyAttachments", Transitions: map[Event]*Transition{ "SanitizeLinks": &Transition{ Node: &SanitizeLinks, Action: func(ctx context.Context) error { return nil }, }, }, } var SanitizeLinks = Node{ State: "SanitizeLinks", Transitions: map[Event]*Transition{ "Terminate": &Transition{ Node: &Terminate, Action: func(ctx context.Context) error { return nil }, }, }, } var Terminate Node