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