Statifier.Validator.Checks.Donedata (Statifier v2.0.0)

Copy Markdown View Source

Check 8 (spec 3.7, 5.7): <donedata> is only legal on a :final state. Reports {:donedata_not_on_final, id} for any non-:final state carrying a non-nil donedata, at the donedata's own location - lib/statifier/document/donedata.ex names this check as the layer that reports the shape rather than one that refuses to build it.

A second rule, spec 5.5's content model: "either a single <content> element or one or more <param> elements as children of <donedata>, but not both." Reports {:donedata_content_and_params, id} for a <donedata> carrying both a <content> child and one or more <param> children, at the <donedata>'s own location. lib/statifier/document/donedata.ex makes content and params both representable at once precisely so this arm can report the shape rather than lowering refusing to build it - the same division of labour the first rule above already has. This arm is inert until <param> is supported, and it is written now so it lands with <param> rather than being rediscovered then.

Summary

Functions

Returns a :donedata_not_on_final error for every state that carries a non-nil donedata but is not itself a :final state, and a :donedata_content_and_params error for every <donedata> that carries both a <content> child and one or more <param> children. Returns [] when every <donedata> element in the document sits on a <final> and specifies at most one of <content>/<param>.

Functions

check(document, context)

@spec check(
  document :: Statifier.Document.t(),
  context :: Statifier.Validator.Context.t()
) :: [
  Statifier.Validator.Error.t()
]

Returns a :donedata_not_on_final error for every state that carries a non-nil donedata but is not itself a :final state, and a :donedata_content_and_params error for every <donedata> that carries both a <content> child and one or more <param> children. Returns [] when every <donedata> element in the document sits on a <final> and specifies at most one of <content>/<param>.