Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

扩展 Sora

Sora 设计上可以作为库使用,便于项目方增加自己的语言或数据格式支持。

扩展边界被刻意拆开:

input adapter -> schema model -> normalized IR -> data validation
                                      |-> exporter
                                      |-> code generator

添加 Code Generator

实现 generator trait:

#![allow(unused)]
fn main() {
pub trait CodeGenerator: Send + Sync {
    fn generate(&self, context: CodegenContext<'_>, out_dir: &Path) -> Result<()>;
}
}

注册 target id、alias、runtime capability 和可选 formatter 配置。

更完整的说明见生成器

保持 IR 中立

语言相关配置应该放在 target options 和 generator 代码里。归一化 IR 只描述 schema 语义:package、table、field、type、key、index、union 和 validation metadata。

项目自己的语言类型映射应该通过 codegen type mapping provider 实现,而不是写进 schema 字段。这样数据语义和目标语言表示保持分离,例如把 struct<Vec3> 映射到 UnityEngine.Vector3

添加 Exporter

Exporter 和 generator 是分离的。如果需要新的运行时数据包格式,就添加 data exporter。如果需要新的语言目标,就添加 code generator。

导出器边界见导出器