All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.co.real_logic.artio.builder.Decoder Maven / Gradle / Ivy

/*
 * Copyright 2015-2024 Real Logic Limited., Adaptive Financial Consulting Ltd., Monotonic Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package uk.co.real_logic.artio.builder;

import uk.co.real_logic.artio.decoder.SessionHeaderDecoder;
import uk.co.real_logic.artio.util.AsciiBuffer;

/**
 * Parent interface that all Artio decoders implement.
 */
public interface Decoder extends CharAppender
{
    int NO_ERROR = -1;

    int decode(AsciiBuffer buffer, int offset, int length);

    /**
     * Resets the result of the decoder.
     */
    void reset();

    /**
     * If Validation is switched on then returns it true if the message is valid, false otherwise. If
     * Validation is switched off then the result of this is undefined.
     *
     * @return true if the message is valid, false otherwise
     */
    boolean validate();

    /**
     * You must call {@link #validate()} first before relying on the result of this method.
     *
     * @return the tag id of the tag that failed validation, or {@code NO_ERROR} if there's no error.
     */
    int invalidTagId();

    /**
     * You must call {@link #validate()} first before relying on the result of this method.
     *
     * This method doesn't return an enum in order to avoid cyclic compilation dependencies upon generated enums.
     *
     * @return the session reject reason error code corresponding to the validation error,
     * or {@code NO_ERROR} if there's no error.
     */
    int rejectReason();

    /**
     * Gets the Header component of this message.
     *
     * @return the Header component of this message.
     */
    SessionHeaderDecoder header();

    /**
     * Append a JSON representation of this Decoder value to a {@link StringBuilder} object for debugging purposes.
     * Note: there is no guarantee that this internal format will be stable between versions this should only be used
     * for debugging purposes. This should be preferred to {@link Object#toString()} because it is a more efficient,
     * zero allocation, method.
     *
     * @param builder the builder to append a JSON string representation to.
     * @param level the whitespace indentation level to use.
     * @return the builder passed as an argument
     */
    StringBuilder appendTo(StringBuilder builder, int level);

    /**
     * Copies the field values on the Encoder to be the same as this Decoder. This also sets all child components and
     * repeating group values to be the same.
     *
     * This method also resets the encoder before any fields are set so that missing values within the Decoder are also
     * missing within the Encoder. If you wish to copy some of a decoder's fields and set others then the values to be
     * set should be done after this method is called.
     *
     * Care should be taken when using this method - encoders flyweight their String-like fields so the fields of the
     * Decoder will be referenced by the Encoder when
     *
     * @param encoder the encoder to set the values of.
     * @return the encoder passed as an argument.
     */
    Encoder toEncoder(Encoder encoder);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy