package com.linkedin.data.schema; import java.io.InputStream; import java.io.Reader; import java.util.List; /** * A schema parser is used to parse data schemas for a particular source representation. */ public interface PegasusSchemaParser { /** * Parse a source representation of a schema from an {@link InputStream}. * * The top level {@link DataSchema}'s parsed are in {@link #topLevelDataSchemas}. * These are the types that are not defined within other types. * Parse errors are in {@link #errorMessageBuilder} and indicated * by {@link #hasError()}. * * @param inputStream with the source representation of the schema. */ void parse(InputStream inputStream); /** * Parse a source representation of a schema from a {@link Reader}. * * The top level {@link DataSchema}'s parsed are in {@link #topLevelDataSchemas}. * These are the types that are not defined within other types. * Parse errors are in {@link #errorMessageBuilder} and indicated * by {@link #hasError()}. * * @param reader with the source representation of the schema. */ void parse(Reader reader); /** * Parse a source representation of a schema from a {@link String}. * * The top level {@link DataSchema}'s parsed are in {@link #topLevelDataSchemas}. * These are the types that are not defined within other types. * Parse errors are in {@link #errorMessageBuilder} and indicated * by {@link #hasError()}. * * @param string with the source representation of the schema. */ void parse(String string); /** * Get the {@link DataSchemaResolver}. * * @return the resolver to used to find {@link DataSchema}'s, may be null * if no resolver has been provided to parser. */ DataSchemaResolver getResolver(); /** * Set the current location for the source of input to the parser. * * This current location is will be used to annotate {@link NamedDataSchema}'s * generated from parsing. * * @param location of the input source. */ void setLocation(DataSchemaLocation location); /** * Get the current location for the source of input to the parser. * * @return the location of the input source. */ DataSchemaLocation getLocation(); /** * Return the top level {@link DataSchema}'s. * * The top level DataSchema's represent the types * that are not defined within other types. * * @return the list of top level {@link DataSchema}'s in the * order that are defined. */ List<DataSchema> topLevelDataSchemas(); /** * Look for {@link DataSchema} with the specified name. * * @param fullName to lookup. * @return the {@link DataSchema} if lookup was successful else return null. */ DataSchema lookupName(String fullName); /** * Return whether any error occurred during parsing. * * @return true if at least one error occurred during parsing. */ boolean hasError(); /** * Return the error message from parsing. * * @return the error message. */ String errorMessage(); StringBuilder errorMessageBuilder(); /** * Dump the top level schemas. * * @return a textual dump of the top level schemas. */ String schemasToString(); }