SYNOPSIS

        use JSON::Schema::Shorthand;
    
        my $schema = js_shorthand({
            object => { foo => 'number', bar => { type => 'string', required => 1 }         
        });
    
        # $schema is 
        # { 
        #   type => 'object',
        #   properties => {
        #       foo => { type => 'number' },
        #       bar => { type => string },
        #  }
        #  required => [ 'bar' ],
        # }
        

DESCRIPTION

    JSON Schema is a useful beast, but its schema definition can be a
    little bit more long-winded than necessary. This module allows to use a
    few shortcuts that will be expanded into their canonical form.

    CAVEAT: the module is still very young, and there are plenty of
    properties this module should expand and does not. So don't trust it
    blindly. If you hit such a case, raise a ticket and I'll refine the
    process.

 js_shorthand

        my $schema = js_shorthand $shorthand;

    The module exports a single function, js_shorthand, that takes in a
    JSON schema in shorthand notation and returns the expanded, canonical
    schema form.

    If you don't like the name js_shorthand, you can always import it under
    a different name in your namespace.

        use JSON::Schema::Shorthand 'js_shorthand' => { -as => 'expand_json_schema' };
    
        ...;
    
        my $schema = expand_json_schema $shorthand;

  Types as string

    If a string type is encountered where a property definition is
    expected, the string is expanded to the object { "type": type }.

        {
            "foo": "number",
            "bar": "string"
        }

    expands to

        {
            "foo": { "type": "number" },
            "bar": { "type": "string" }
        }

    If the string begins with a #, the type is assumed to be a reference
    and #type is expanded to { "$ref": type }.

        { "foo": "#/definitions/bar" } 

    becomes

        { "foo": { "$ref": "#/definitions/bar" } }

  object property

    { object: properties } expands to { type: "object", properties }.

        shorthand                              expanded
        ------------------------               ---------------------------
        foo: {                                  foo: {
            object: {                               type: "object",
                bar: { }                            properties: {
            }                                           bar: { }
        }                                           }
                                                }

  array property

    { array: items } expands to { type: "array", items }.

        shorthand                              expanded
        ------------------------               ---------------------------
        foo: {                                  foo: {
            array: 'number'                         type: "array",
        }                                           items: {
                                                        type: 'number' 
                                                    }
                                                }

  required property

    If the required attribute is set to true for a property, it is bubbled
    up to the required attribute of its parent object.

        shorthand                              expanded
        ------------------------               ---------------------------
    
        foo: {                                  foo: {
            properties: {                           required: [ 'bar' ],
              bar: { required: true },              properties: { 
              baz: { }                                bar: {},
            }                                         baz: {}
        }                                       }
                                                

SEE ALSO

    * JSON Schema specs - http://json-schema.org/

    * JavaScript version of this module -
    http://github.com/yanick/json-shema-shorthand

POD ERRORS

    Hey! The above document had some coding errors, which are explained
    below:

    Around line 49:

      Unknown directive: =head2Shorthands