package com.fasterxml.jackson.dataformat.protobuf.schema;

import java.util.List;

import com.fasterxml.jackson.core.FormatSchema;

A FormatSchema implementation for protobuf, bound to specific root-level ProtobufMessage, and useful for reading/writing protobuf content that encodes instance of that message.
/** * A {@link FormatSchema} implementation for protobuf, bound to specific root-level * {@link ProtobufMessage}, and useful for reading/writing protobuf content * that encodes instance of that message. */
public class ProtobufSchema implements FormatSchema { public final static String FORMAT_NAME_PROTOBUF = "protobuf";
In case we want to use a different root type, we'll also hold a reference to the native definition, if one is available. Note that it may be possible to construct instances directly, in which case this would be `null`.
/** * In case we want to use a different root type, we'll also hold * a reference to the native definition, if one is available. * Note that it may be possible to construct instances directly, * in which case this would be `null`. */
protected final NativeProtobufSchema _source; protected final ProtobufMessage _rootType; /* /************************************************************ /* Construction /************************************************************ */ public ProtobufSchema(NativeProtobufSchema src, ProtobufMessage rootType) { _source = src; _rootType = rootType; }
Method that can be called to choose different root type (of types defined in protoc); a new schema instance will be constructed if type is different from current root type.

Note that cost of changing root type is non-trivial in that traversal of types defined is needed -- but exact cost depends on number of types defined. Since schema instances are immutable, it makes sense to try to reuse instances if possible.

Throws:
  • IllegalArgumentException – If no type with specified name is found from within this schema.
/** * Method that can be called to choose different root type (of types * defined in protoc); a new schema instance will be constructed * if type is different from current root type. *<p> * Note that cost of changing root type is non-trivial in that traversal * of types defined is needed -- but exact cost depends on number of types * defined. Since schema instances are immutable, it makes sense to try to * reuse instances if possible. * * @throws IllegalArgumentException If no type with specified name is found * from within this schema. */
public ProtobufSchema withRootType(String typeName) throws IllegalArgumentException { if (_rootType.getName().equals(typeName)) { return this; } return _source.forType(typeName); } /* /********************************************************** /* API /********************************************************** */
Accessor for native representation of the protoc. Mostly useful for debugging; application code should not need to access this representation during normal operation.
/** * Accessor for native representation of the protoc. * Mostly useful for debugging; application code should not need to * access this representation during normal operation. */
public NativeProtobufSchema getSource() { return _source; }
Accessor for getting the default ProtobufMessage type that is usually the root type for this schema.
/** * Accessor for getting the default {@link ProtobufMessage} type that * is usually the root type for this schema. */
public ProtobufMessage getRootType() { return _rootType; }
Accessor for listing names of all root-level messages defined in the original protoc.
/** * Accessor for listing names of all root-level messages defined in the * original protoc. */
public List<String> getMessageTypes() { return _source.getMessageNames(); }
Accessor to get type id for this FormatSchema, used by code Jackson databinding functionality. Not usually needed by application developers.
/** * Accessor to get type id for this {@link FormatSchema}, used by code Jackson * databinding functionality. Not usually needed by application developers. */
@Override public String getSchemaType() { return FORMAT_NAME_PROTOBUF; } /* /********************************************************** /* API /********************************************************** */ @Override public String toString() { return String.valueOf(_source); } }