school_index.proto 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. syntax = "proto3";
  2. option java_multiple_files = true;
  3. option java_package = "school_index";
  4. // 定义包名,影响生成的 Python/Kotlin/Swift 模块名
  5. package school_index;
  6. // --- 1. 适配器类别枚举 ---
  7. // 使用枚举保证类型安全和编译期检查
  8. enum AdapterCategory {
  9. // 必须从 0 开始
  10. ADAPTER_CATEGORY_UNKNOWN = 0;
  11. // 明确定义所有类别,编号不可更改!
  12. GENERAL_TOOL = 1; // 通用工具
  13. BACHELOR_AND_ASSOCIATE = 2; // 本科/专科教务系统
  14. POSTGRADUATE = 3; // 研究生教务系统
  15. }
  16. // --- 2. 顶层消息:整个索引文件 ---
  17. message SchoolIndex {
  18. // 字段编号 1:显式协议版本号,用于客户端发现不兼容的大改动
  19. int64 protocol_version = 1;
  20. // 字段编号 2:数据文件的版本ID (CI/CD自动生成的Commit Hash或时间戳)
  21. string version_id = 2;
  22. // 字段编号 3:所有学校和通用工具的列表
  23. repeated School schools = 3;
  24. }
  25. // --- 3. 消息:单个学校或通用工具集 ---
  26. message School {
  27. // 字段编号 1:主键 (例如 CUST, YNUFE, GLOBAL_TOOLS)
  28. string id = 1;
  29. // 字段编号 2:用于显示的名称
  30. string name = 2;
  31. // 字段编号 3:拼音首字母,用于搜索和排序
  32. string initial = 3;
  33. // 字段编号 4:资源文件夹名称 (与 id 相同,但保持独立字段以增加灵活性)
  34. string resource_folder = 4;
  35. // 字段编号 5:该学校下的所有适配器列表
  36. repeated Adapter adapters = 5;
  37. }
  38. // --- 4. 消息:单个适配器的结构 ---
  39. message Adapter {
  40. // 字段编号 1:适配器唯一 ID (例如 CUST_01, SHZQ_01)
  41. string adapter_id = 1;
  42. // 字段编号 2:适配器名称
  43. string adapter_name = 2;
  44. // 字段编号 3:适配器类别,使用强类型枚举
  45. AdapterCategory category = 3;
  46. // 字段编号 4:JS 文件的相对路径 (例如 cust.js)
  47. string asset_js_path = 4;
  48. // 字段编号 5:可选的外部导入 URL
  49. optional string import_url = 5;
  50. // 字段编号 6:适配器的详细描述(新增)
  51. string description = 6;
  52. // 字段编号 7:维护者信息(新增)
  53. string maintainer = 7;
  54. }