亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

OpenAPI中的枚舉映射詳解

OpenAPI 本身并不直接支持将枚举键映射到对应的值。如果我们有如下所示的 C# 枚举:

    枚举方向 {  
      上 = 0;  
      下 = 1;  
      左 = 2;  
      右 = 3;  
    }

对应的OpenAPI json文件会缺少枚举常量。为了提供这些枚举常量的名称,我们可以使用x-enum-varnames扩展。这个扩展可以让我们为枚举提供额外的元数据,比如在代码中使用的变量名。

下面是我们在 OpenAPI JSON 文件中表示我们 C# 示例中的 Direction 枚举类型的方法:

{  
  "components": {  
    "模式": {  
      "方向": {  
        "type": "整数",  
        "enum": [0, 1, 2, 3],  
        "x-enum-varnames": ["上", "下", "左", "右"]  
      }  
    }  
  }  
}

解释。

  • type: 类型设为整型,因为在 C# 中枚举的值是整数。
  • enum: 此数组包含了枚举的所有可能整数值。
  • x-enum-varnames: 这是一个自定义扩展,列出了每个枚举值对应的变量名。此扩展不是官方 OpenAPI 规范的一部分,但通常用来提供额外的上下文或元数据。

结论

尽管 OpenAPI 本身不直接支持枚举的键值映射,但可以通过使用类似 x-enum-varnames 的扩展来灵活地包含额外的元数据。

客户端生成器工具如 openapi-generator-cli 可以利用此扩展为生成的枚举提供键值对映射。

即使这些工具不直接支持枚举类型,我们也可以通过后续处理来生成这些枚举类型。

const extractEnums = (openApiDoc: OpenAPIObject) => {  
  const schemas = openApiDoc.components?.schemas;  
  if (!schemas) return {};  
  const enumConstants = {} as Record<string, string>;  
  for (const [key, schema] of Object.entries(schemas)) {  
    if ("enum" in schema && "x-enum-varnames" in schema) {  
      const enumValues = schema.enum as number[];  
      const enumNames = schema["x-enum-varnames"] as string[];  
      const enumMap = enumNames.reduce((acc, name, index) => {  
        acc[name] = enumValues[index];  
        return acc;  
      }, {} as Record<string, number>);  
      const enumKey = key.replaceAll(".", "_");  
      enumConstants[key] = `  
    export const ${enumKey} = {  
    ${enumNames.map((name) => `${name}: ${enumMap[name]}`).join(",\n")}  
    } as const;  
      `;  
    }  
  }  
  return `export namespace enums {  
    ${Object.values(enumConstants).join("\n")}  
  }`;  
}

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消