// The messages of etcd's auth, maintenance, cluster, lock and election services, as
// the HTTP/JSON gateway names their fields. One entry per message; `gateway_json.mbt`
// reads it in both directions, and `scripts/check_field_numbers.py` checks it
// against etcd's .proto files.

///|
fn admin_message_fields(name : String) -> Array[JsonField]? {
  match name {
    "StatusRequest" => Some([])
    "DefragmentRequest" => Some([])
    "AuthUserListRequest" => Some([])
    "AuthStatusRequest" => Some([])
    "AuthRoleListRequest" => Some([])
    "AuthEnableRequest" => Some([])
    "AuthDisableRequest" => Some([])
    "AuthenticateRequest" =>
      Some([
        { number: 1, name: "name", kind: Str, presence: false, },
        { number: 2, name: "password", kind: Str, presence: false, },
      ])
    "AuthenticateResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "token", kind: Str, presence: false, },
      ])
    "AuthEnableResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "AuthDisableResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "AuthStatusResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "enabled", kind: Bool, presence: false, },
        { number: 3, name: "authRevision", kind: UInt64, presence: false, },
      ])
    "AuthUserAddRequest" =>
      Some([
        { number: 1, name: "name", kind: Str, presence: false, },
        { number: 2, name: "password", kind: Str, presence: false, },
        {
          number: 3,
          name: "options",
          kind: Message("UserAddOptions"),
          presence: false,
        },
        { number: 4, name: "hashedPassword", kind: Str, presence: false, },
      ])
    "AuthUserAddResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "UserAddOptions" =>
      Some([{ number: 1, name: "no_password", kind: Bool, presence: false, }])
    "AuthUserGetRequest" =>
      Some([{ number: 1, name: "name", kind: Str, presence: false, }])
    "AuthUserGetResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "roles", kind: Rep(Str), presence: false, },
      ])
    "AuthUserListResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "users", kind: Rep(Str), presence: false, },
      ])
    "AuthUserDeleteRequest" =>
      Some([{ number: 1, name: "name", kind: Str, presence: false, }])
    "AuthUserDeleteResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "AuthUserChangePasswordRequest" =>
      Some([
        { number: 1, name: "name", kind: Str, presence: false, },
        { number: 2, name: "password", kind: Str, presence: false, },
        { number: 3, name: "hashedPassword", kind: Str, presence: false, },
      ])
    "AuthUserChangePasswordResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "AuthUserGrantRoleRequest" =>
      Some([
        { number: 1, name: "user", kind: Str, presence: false, },
        { number: 2, name: "role", kind: Str, presence: false, },
      ])
    "AuthUserGrantRoleResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "AuthUserRevokeRoleRequest" =>
      Some([
        { number: 1, name: "name", kind: Str, presence: false, },
        { number: 2, name: "role", kind: Str, presence: false, },
      ])
    "AuthUserRevokeRoleResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "AuthRoleAddRequest" =>
      Some([{ number: 1, name: "name", kind: Str, presence: false, }])
    "AuthRoleAddResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "AuthRoleGetRequest" =>
      Some([{ number: 1, name: "role", kind: Str, presence: false, }])
    "AuthRoleGetResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        {
          number: 2,
          name: "perm",
          kind: Rep(Message("Permission")),
          presence: false,
        },
      ])
    "AuthRoleListResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "roles", kind: Rep(Str), presence: false, },
      ])
    "AuthRoleDeleteRequest" =>
      Some([{ number: 1, name: "role", kind: Str, presence: false, }])
    "AuthRoleDeleteResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "AuthRoleGrantPermissionRequest" =>
      Some([
        { number: 1, name: "name", kind: Str, presence: false, },
        {
          number: 2,
          name: "perm",
          kind: Message("Permission"),
          presence: false,
        },
      ])
    "AuthRoleGrantPermissionResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "AuthRoleRevokePermissionRequest" =>
      Some([
        { number: 1, name: "role", kind: Str, presence: false, },
        { number: 2, name: "key", kind: Bytes, presence: false, },
        { number: 3, name: "range_end", kind: Bytes, presence: false, },
      ])
    "AuthRoleRevokePermissionResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "Permission" =>
      Some([
        {
          number: 1,
          name: "permType",
          kind: Enum(["READ", "WRITE", "READWRITE"]),
          presence: false,
        },
        { number: 2, name: "key", kind: Bytes, presence: false, },
        { number: 3, name: "range_end", kind: Bytes, presence: false, },
      ])
    "AlarmRequest" =>
      Some([
        {
          number: 1,
          name: "action",
          kind: Enum(["GET", "ACTIVATE", "DEACTIVATE"]),
          presence: false,
        },
        { number: 2, name: "memberID", kind: UInt64, presence: false, },
        {
          number: 3,
          name: "alarm",
          kind: Enum(["NONE", "NOSPACE", "CORRUPT"]),
          presence: false,
        },
      ])
    "AlarmResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        {
          number: 2,
          name: "alarms",
          kind: Rep(Message("AlarmMember")),
          presence: false,
        },
      ])
    "AlarmMember" =>
      Some([
        { number: 1, name: "memberID", kind: UInt64, presence: false, },
        {
          number: 2,
          name: "alarm",
          kind: Enum(["NONE", "NOSPACE", "CORRUPT"]),
          presence: false,
        },
      ])
    "StatusResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "version", kind: Str, presence: false, },
        { number: 3, name: "dbSize", kind: Int64, presence: false, },
        { number: 4, name: "leader", kind: UInt64, presence: false, },
        { number: 5, name: "raftIndex", kind: UInt64, presence: false, },
        { number: 6, name: "raftTerm", kind: UInt64, presence: false, },
        { number: 7, name: "raftAppliedIndex", kind: UInt64, presence: false, },
        { number: 8, name: "errors", kind: Rep(Str), presence: false, },
        { number: 9, name: "dbSizeInUse", kind: Int64, presence: false, },
        { number: 10, name: "isLearner", kind: Bool, presence: false, },
      ])
    "DefragmentResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "HashRequest" => Some([])
    "HashResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "hash", kind: UInt32, presence: false, },
      ])
    "HashKVRequest" =>
      Some([{ number: 1, name: "revision", kind: Int64, presence: false, }])
    "HashKVResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "hash", kind: UInt32, presence: false, },
        { number: 3, name: "compact_revision", kind: Int64, presence: false, },
      ])
    "SnapshotRequest" => Some([])
    "SnapshotResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "remaining_bytes", kind: UInt64, presence: false, },
        { number: 3, name: "blob", kind: Bytes, presence: false, },
      ])
    "MoveLeaderRequest" =>
      Some([{ number: 1, name: "targetID", kind: UInt64, presence: false, }])
    "MoveLeaderResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "DowngradeRequest" =>
      Some([
        {
          number: 1,
          name: "action",
          kind: Enum(["VALIDATE", "ENABLE", "CANCEL"]),
          presence: false,
        },
        { number: 2, name: "version", kind: Str, presence: false, },
      ])
    "DowngradeResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "version", kind: Str, presence: false, },
      ])
    "Member" =>
      Some([
        { number: 1, name: "ID", kind: UInt64, presence: false, },
        { number: 2, name: "name", kind: Str, presence: false, },
        { number: 3, name: "peerURLs", kind: Rep(Str), presence: false, },
        { number: 4, name: "clientURLs", kind: Rep(Str), presence: false, },
        { number: 5, name: "isLearner", kind: Bool, presence: false, },
      ])
    "MemberAddRequest" =>
      Some([
        { number: 1, name: "peerURLs", kind: Rep(Str), presence: false, },
        { number: 2, name: "isLearner", kind: Bool, presence: false, },
      ])
    "MemberAddResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "member", kind: Message("Member"), presence: false, },
        {
          number: 3,
          name: "members",
          kind: Rep(Message("Member")),
          presence: false,
        },
      ])
    "MemberRemoveRequest" =>
      Some([{ number: 1, name: "ID", kind: UInt64, presence: false, }])
    "MemberRemoveResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        {
          number: 2,
          name: "members",
          kind: Rep(Message("Member")),
          presence: false,
        },
      ])
    "MemberUpdateRequest" =>
      Some([
        { number: 1, name: "ID", kind: UInt64, presence: false, },
        { number: 2, name: "peerURLs", kind: Rep(Str), presence: false, },
      ])
    "MemberUpdateResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        {
          number: 2,
          name: "members",
          kind: Rep(Message("Member")),
          presence: false,
        },
      ])
    "MemberListRequest" =>
      Some([{ number: 1, name: "linearizable", kind: Bool, presence: false, }])
    "MemberListResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        {
          number: 2,
          name: "members",
          kind: Rep(Message("Member")),
          presence: false,
        },
      ])
    "MemberPromoteRequest" =>
      Some([{ number: 1, name: "ID", kind: UInt64, presence: false, }])
    "MemberPromoteResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        {
          number: 2,
          name: "members",
          kind: Rep(Message("Member")),
          presence: false,
        },
      ])
    "LockRequest" =>
      Some([
        { number: 1, name: "name", kind: Bytes, presence: false, },
        { number: 2, name: "lease", kind: Int64, presence: false, },
      ])
    "LockResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "key", kind: Bytes, presence: false, },
      ])
    "UnlockRequest" =>
      Some([{ number: 1, name: "key", kind: Bytes, presence: false, }])
    "UnlockResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "CampaignRequest" =>
      Some([
        { number: 1, name: "name", kind: Bytes, presence: false, },
        { number: 2, name: "lease", kind: Int64, presence: false, },
        { number: 3, name: "value", kind: Bytes, presence: false, },
      ])
    "CampaignResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        {
          number: 2,
          name: "leader",
          kind: Message("LeaderKey"),
          presence: false,
        },
      ])
    "LeaderKey" =>
      Some([
        { number: 1, name: "name", kind: Bytes, presence: false, },
        { number: 2, name: "key", kind: Bytes, presence: false, },
        { number: 3, name: "rev", kind: Int64, presence: false, },
        { number: 4, name: "lease", kind: Int64, presence: false, },
      ])
    "ProclaimRequest" =>
      Some([
        {
          number: 1,
          name: "leader",
          kind: Message("LeaderKey"),
          presence: false,
        },
        { number: 2, name: "value", kind: Bytes, presence: false, },
      ])
    "ProclaimResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    "LeaderRequest" =>
      Some([{ number: 1, name: "name", kind: Bytes, presence: false, }])
    "LeaderResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
        { number: 2, name: "kv", kind: Message("KeyValue"), presence: false, },
      ])
    "ResignRequest" =>
      Some([
        {
          number: 1,
          name: "leader",
          kind: Message("LeaderKey"),
          presence: false,
        },
      ])
    "ResignResponse" =>
      Some([
        {
          number: 1,
          name: "header",
          kind: Message("ResponseHeader"),
          presence: false,
        },
      ])
    _ => None
  }
}