function isEnumObject(arg) {
    if (typeof arg != 'object' || arg === null) {
        return false;
    }
    if (!arg.hasOwnProperty(0)) {
        return false;
    }
    for (let k of Object.keys(arg)) {
        let num = parseInt(k);
        if (!Number.isNaN(num)) {
            // is there a name for the number?
            let nam = arg[num];
            if (nam === undefined)
                return false;
            // does the name resolve back to the number?
            if (arg[nam] !== num)
                return false;
        }
        else {
            // is there a number for the name?
            let num = arg[k];
            if (num === undefined)
                return false;
            // is it a string enum?
            if (typeof num !== 'number')
                return false;
            // do we know the number?
            if (arg[num] === undefined)
                return false;
        }
    }
    return true;
}
Is this a lookup object generated by Typescript, for a Typescript enum
generated by protobuf-ts?

- No `const enum` (enum must not be inlined, we need reverse mapping).
- No string enum (we need int32 for protobuf).
- Must have a value for 0 (otherwise, we would need to support custom default values).