$darkmode
fable::schema::CustomDeserializer Class Reference

#include <custom.hpp>

Inheritance diagram for fable::schema::CustomDeserializer:
[legend]
Collaboration diagram for fable::schema::CustomDeserializer:
[legend]

Public Member Functions

 CustomDeserializer (Box &&s)
 
 CustomDeserializer (Box &&s, std::function< void(CustomDeserializer *, const Conf &)> f)
 
 operator Box () const
 
void set_from_conf (std::function< void(CustomDeserializer *, const Conf &)> f)
 
CustomDeserializer with_from_conf (std::function< void(CustomDeserializer *, const Conf &)> f) &&
 
Interfaceclone () const override
 
JsonType type () const override
 
std::string type_string () const override
 
bool is_required () const override
 
const std::string & description () const override
 
void set_description (const std::string &s) override
 
Json usage () const override
 
Json json_schema () const override
 
void validate (const Conf &c) const override
 
void to_json (Json &j) const override
 
void from_conf (const Conf &c) override
 
void reset_ptr () override
 
- Public Member Functions inherited from fable::schema::Interface
virtual bool is_variant () const
 
virtual bool is_valid (const Conf &c) const
 
virtual Json to_json () const
 

Friends

void to_json (Json &j, const CustomDeserializer &b)
 

Detailed Description

The CustomDeserializer allows the user to replace the deserialization of a Schema with a custom function.

This is especially useful for schema types such as Variants.

Note that if you use this, you may have to define to_json yourself.

Member Function Documentation

◆ clone()

Interface* fable::schema::CustomDeserializer::clone ( ) const
inlineoverridevirtual

Return a new instance of the object.

This is implemented by Base and allows us to wrap implementors of Interface with Schema.

Implements fable::schema::Interface.

Here is the call graph for this function:

◆ description()

const std::string& fable::schema::CustomDeserializer::description ( ) const
inlineoverridevirtual

Return human-readable description.

Implements fable::schema::Interface.

◆ from_conf()

void fable::schema::CustomDeserializer::from_conf ( const Conf )
inlineoverridevirtual

Apply the input JSON configuration.

This does not validate the input.

Implements fable::schema::Interface.

◆ is_required()

bool fable::schema::CustomDeserializer::is_required ( ) const
inlineoverridevirtual

Return whether this interface needs to be set.

Implements fable::schema::Interface.

◆ json_schema()

Json fable::schema::CustomDeserializer::json_schema ( ) const
inlineoverridevirtual

Return the JSON schema.

Example output:

{ "$schema": "http://json-schema.org/draft-07/schema#", "description": "stand-in no-operation simulator", "properties": { "vehicles": { "description": "list of vehicle names to make available", "items": { "type": "string" }, "type": "array" } }, "title": "nop", "additionalProperties": false, "type": "object" }

See the following links for the specification:

Implements fable::schema::Interface.

◆ reset_ptr()

void fable::schema::CustomDeserializer::reset_ptr ( )
inlineoverridevirtual

Reset the internal pointer to nullptr, protecting against invalid access.

This should be used when a schema is used after the backing data has been deleted.

Implements fable::schema::Interface.

Here is the call graph for this function:

◆ set_description()

void fable::schema::CustomDeserializer::set_description ( const std::string &  s)
inlineoverridevirtual

Set human-readable description.

Implements fable::schema::Interface.

◆ to_json()

void fable::schema::CustomDeserializer::to_json ( Json ) const
inlineoverridevirtual

Return the current value of the destination.

Warning: This is NOT an efficient operation, but it can be useful for cases where speed is not important.

Implements fable::schema::Interface.

◆ type()

JsonType fable::schema::CustomDeserializer::type ( ) const
inlineoverridevirtual

Return the JSON type.

If this is a variant type of differing types, then null should be returned. Otherwise, the type remains unique and can be returned. A type that is null is almost always a variant type of some sort, if even only an optional type.

Implements fable::schema::Interface.

◆ type_string()

std::string fable::schema::CustomDeserializer::type_string ( ) const
inlineoverridevirtual

Return the type as a string.

The format of the string is:

"[array of] TYPE"

where TYPE is one of: null, object, boolean, float, integer, unsigned, string, and unknown.

Example output:

"object"
"array of boolean"
"array of object"

Implements fable::schema::Interface.

◆ usage()

Json fable::schema::CustomDeserializer::usage ( ) const
inlineoverridevirtual

Return a compact JSON description of the schema. This is useful for human-readable error output.

Example output:

{ "field1": "boolean! :: lorem ipsum dolor sit amet", "field2": { "field2.1": "integer :: lorem ipsum dolor sit amet" "field2.2": "boolean :: lorem ipsum dolor sit amet" }, "field3": "array of integer :: lorem ipsum dolor sit amet", "field4": [{ "field4.1": "string :: lorem ipsum dolor sit amet" "field4.2": "boolean :: lorem ipsum dolor sit amet" }] }

When describing the schema of a primitive array, we can represent that as a single string. But when the array contains an object, we wrap a single object in an array. This isn't awfully consistent, but it's the best we can do.

Implements fable::schema::Interface.

◆ validate()

void fable::schema::CustomDeserializer::validate ( const Conf c) const
inlineoverridevirtual

Validate the input JSON configuration.

If you don't have a Conf but would like to validate a Json type, then construct a Conf on the fly:

s.validate(Conf{j});

This function is not provided inline to prevent incorrect use.

Implements fable::schema::Interface.


The documentation for this class was generated from the following file: