CompatErrIds.java

// SPDX-License-Identifier: Apache-2.0
package com.shengzhiai.yugu.stcompat.internal;

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * errIds of the Shengtong compat layers ({@code compatErrIds} in spec/errors.json). The generated
 * {@link ErrorTable} does not include this section, so the values live here; a unit test checks
 * them against spec/errors.json.
 */
public final class CompatErrIds {
    /** Network or server temporarily unavailable after retries; autoRetry re-evaluates this by default. */
    public static final int RETRYABLE = 20009;
    public static final int AUDIO_FILE_MISSING = 60001;
    public static final int AUDIO_EMPTY = 60002;
    public static final int CORE_TYPE_UNSUPPORTED = 60003;
    public static final int MICROPHONE_UNAVAILABLE = 60004;
    public static final int AUDIO_TOO_SHORT = 60005;
    public static final int REF_TEXT_EMPTY = 60006;
    public static final int ENGINE_NOT_INITIALIZED = 60007;
    public static final int ENGINE_BUSY = 60008;
    /** Larger than the 50 MB REST limit, or WAV and PCM longer than 300 s. */
    public static final int AUDIO_TOO_LARGE = 60009;

    public static final Map<Integer, String> MESSAGES;

    static {
        Map<Integer, String> m = new LinkedHashMap<Integer, String>();
        m.put(RETRYABLE, "网络或服务端临时故障,可重评,autoRetry 默认重评此码");
        m.put(AUDIO_FILE_MISSING, "音频文件不存在或不可读");
        m.put(AUDIO_EMPTY, "音频为空");
        m.put(CORE_TYPE_UNSUPPORTED, "coreType 不支持");
        m.put(MICROPHONE_UNAVAILABLE, "麦克风不可用或没有录音权限");
        m.put(AUDIO_TOO_SHORT, "音频短于 1 秒");
        m.put(REF_TEXT_EMPTY, "refText 为空");
        m.put(ENGINE_NOT_INITIALIZED, "引擎未初始化");
        m.put(ENGINE_BUSY, "引擎正忙,上一次评测未结束");
        m.put(AUDIO_TOO_LARGE, "音频大于 50 MB 或长于 300 秒");
        MESSAGES = Collections.unmodifiableMap(m);
    }

    private CompatErrIds() {
    }

    public static String message(int errId) {
        String m = MESSAGES.get(errId);
        if (m != null) {
            return m;
        }
        ErrorTable.Entry e = ErrorTable.ERRORS.get(errId);
        if (e == null) {
            e = ErrorTable.LOCAL.get(errId);
        }
        return e != null ? e.message : "error " + errId;
    }
}