#

# Example: Enforcing DataTypes

DataSchema supports a `parser` property that enforces type conversion on data as the schema is being applied. The `parser` property can point to one of the following types of parsing functions:

- A DataType subclass parse function, like `Y.DataType.Number.parse`
- A registered shortcut to a DataType subclass parse function, like `"number"`
- A custom function

#### Basic example

###### Data

    {
        "results":[
            {"string":"aardvark", "number":"1", "date":"Jan 1, 2001"},
            {"string":"bat", "number":"2", "date":"Feb 2, 2002"},
            {"string":"camel", "number":"3", "date":"March 3, 2003"}
        ]
    }

###### Schema

    {
        resultListLocator: "results",
        resultFields: [
            "string", // needs no parsing
            {key:"number", parser: "number"}, // point to built-in shortcut
            {key:"date", parser: Y.DataType.Date.parse}] // point to function
    }

###### Normalized data

Use the `parser` property in your schema's `resultFields` definition to point to a parsing function. Parsing your data in this manner is essential if your numerical or date data comes over the wire as JSON, since all the values will be strings.

    YUI().use("datatype", "dataschema", function(Y) {
        var data_in = {
                "results":[
                    {"string":"aardvark", "number":"1", "date":"Jan 1, 2001"},
                    {"string":"bat", "number":"2", "date":"Feb 2, 2002"},
                    {"string":"camel", "number":"3", "date":"March 3, 2003"}
                ]
            },
            schema = {
                resultListLocator: "results",
                resultFields: [
                    // needs no parsing
                    "string",
                    // point parser to built-in function shortcut
                    {key:"number", parser: "number"},
                    // point parser to built-in function
                    {key:"date", parser: Y.DataType.Date.parse}]
            },
            data_out = Y.DataSchema.JSON.apply(schema, data_in).results;
    });