void encodeRAT(UnitEmitter& ue, RepoAuthType rat) { using T = RepoAuthType::Tag; switch (rat.tag()) { case T::Uninit: case T::InitNull: case T::Null: case T::Int: case T::OptInt: case T::Dbl: case T::OptDbl: case T::Res: case T::OptRes: case T::Bool: case T::OptBool: case T::SStr: case T::OptSStr: case T::Str: case T::OptStr: case T::SVec: case T::OptSVec: case T::Vec: case T::OptVec: case T::SDict: case T::OptSDict: case T::Dict: case T::OptDict: case T::SKeyset: case T::OptSKeyset: case T::Keyset: case T::OptKeyset: case T::Obj: case T::OptObj: case T::UncArrKey: case T::ArrKey: case T::OptUncArrKey: case T::OptArrKey: case T::InitUnc: case T::Unc: case T::InitCell: case T::Cell: case T::Ref: case T::InitGen: case T::Gen: ue.emitByte(static_cast<uint8_t>(rat.tag())); break; case T::SArr: case T::OptSArr: case T::Arr: case T::OptArr: case T::SVArr: case T::OptSVArr: case T::VArr: case T::OptVArr: case T::SDArr: case T::OptSDArr: case T::DArr: case T::OptDArr: { auto tagByte = static_cast<uint8_t>(rat.tag()); if (rat.hasArrData()) tagByte |= kRATArrayDataBit; ue.emitByte(tagByte); if (rat.hasArrData()) { ue.emitInt32(rat.arrayId()); } break; } case T::ExactObj: case T::SubObj: case T::OptExactObj: case T::OptSubObj: ue.emitByte(static_cast<uint8_t>(rat.tag())); ue.emitInt32(ue.mergeLitstr(rat.clsName())); break; } }
std::string show(RepoAuthType rat) { auto const tag = rat.tag(); using T = RepoAuthType::Tag; switch (tag) { case T::OptBool: return "?Bool"; case T::OptInt: return "?Int"; case T::OptSStr: return "?SStr"; case T::OptStr: return "?Str"; case T::OptDbl: return "?Dbl"; case T::OptRes: return "?Res"; case T::OptObj: return "?Obj"; case T::OptUncArrKey: return "?UncArrKey"; case T::OptArrKey: return "?ArrKey"; case T::Null: return "Null"; case T::Cell: return "Cell"; case T::Ref: return "Ref"; case T::InitUnc: return "InitUnc"; case T::Unc: return "Unc"; case T::UncArrKey:return "UncArrKey"; case T::ArrKey: return "ArrKey"; case T::InitCell: return "InitCell"; case T::InitGen: return "InitGen"; case T::Gen: return "Gen"; case T::Uninit: return "Uninit"; case T::InitNull: return "InitNull"; case T::Bool: return "Bool"; case T::Int: return "Int"; case T::Dbl: return "Dbl"; case T::Res: return "Res"; case T::SStr: return "SStr"; case T::Str: return "Str"; case T::Obj: return "Obj"; case T::OptSArr: case T::OptArr: case T::SArr: case T::Arr: case T::OptSVArr: case T::OptVArr: case T::SVArr: case T::VArr: case T::OptSDArr: case T::OptDArr: case T::SDArr: case T::DArr: { auto ret = std::string{}; if (tag == T::OptArr || tag == T::OptSArr || tag == T::OptVArr || tag == T::OptSVArr || tag == T::OptDArr || tag == T::OptSDArr) { ret += '?'; } if (tag == T::SArr || tag == T::OptSArr || tag == T::SVArr || tag == T::OptSVArr || tag == T::SDArr || tag == T::OptSDArr) { ret += 'S'; } if (tag == T::OptArr || tag == T::Arr || tag == T::OptSArr || tag == T::SArr) { ret += "Arr"; } else if (tag == T::OptVArr || tag == T::VArr || tag == T::OptSVArr || tag == T::SVArr) { ret += "VArr"; } else { ret += "DArr"; } if (rat.hasArrData()) folly::format(&ret, "{}", show(*rat.array())); return ret; } break; case T::SVec: return "SVec"; case T::Vec: return "Vec"; case T::OptSVec: return "?SVec"; case T::OptVec: return "?Vec"; case T::SDict: return "SDict"; case T::Dict: return "Dict"; case T::OptSDict: return "?SDict"; case T::OptDict: return "?Dict"; case T::SKeyset: return "SKeyset"; case T::Keyset: return "Keyset"; case T::OptSKeyset: return "?SKeyset"; case T::OptKeyset: return "?Keyset"; case T::OptSubObj: case T::OptExactObj: case T::SubObj: case T::ExactObj: { auto ret = std::string{}; if (tag == T::OptSubObj || tag == T::OptExactObj) { ret += '?'; } ret += "Obj"; if (tag == T::OptSubObj || tag == T::SubObj) { ret += "<"; } ret += '='; ret += rat.clsName()->data(); return ret; } } not_reached(); }