ToStringMode.java

// Copyright (c) ZeroC, Inc.

package com.zeroc.Ice;

/**
 * The output mode for xxxToString methods such as {@code identityToString} and {@code proxyToString}.
 * The actual encoding format for the string is the same for all modes: you don't need to specify an
 * encoding format or mode when reading such a string.
 */
public enum ToStringMode {
    /**
     * Characters with ordinal values greater than 127 are kept as-is in the resulting string.
     * Non-printable ASCII characters with ordinal values 127 and below are encoded as \\t, \\n
     * (etc.) or \\unnnn.
     */
    Unicode(0),

    /**
     * Characters with ordinal values greater than 127 are encoded as universal character names in the resulting string:
     * \\unnnn for BMP characters and \\Unnnnnnnn for non-BMP characters.
     * Non-printable ASCII characters with ordinal values 127 and below are encoded as \\t, \\n (etc.) or \\unnnn.
     */
    ASCII(1),

    /**
     * Characters with ordinal values greater than 127 are encoded as a sequence of UTF-8 bytes using octal escapes.
     * Characters with ordinal values 127 and below are encoded as \\t, \\n (etc.) or an octal escape.
     * Use this mode to generate strings compatible with Ice 3.6 and earlier.
     */
    Compat(2);

    /**
     * Returns the integer value of this enumerator.
     *
     * @return the integer value of this enumerator
     */
    public int value() {
        return _value;
    }

    /**
     * Returns the enumerator corresponding to the given integer value.
     *
     * @param v the integer value of the enumerator
     * @return the enumerator corresponding to the given integer value, or {@code null} if no such enumerator exists
     */
    public static ToStringMode valueOf(int v) {
        return switch (v) {
            case 0 -> Unicode;
            case 1 -> ASCII;
            case 2 -> Compat;
            default -> null;
        };
    }

    private ToStringMode(int v) {
        _value = v;
    }

    private final int _value;
}