Behaviour for calling applications to implement in order to use Proton.
path() :: String.t()
spec() :: map()
checker(spec()) :: {:ok, spec()} | {:error, %Proton.Errors.CheckFailed{ __exception__: term(), errors: term(), message: term(), spec: term() }}
children() :: [atom()]
filter(spec()) :: spec()
resolve(path()) :: spec()