mirror of
https://github.com/clockworklabs/SpacetimeDB.git
synced 2026-05-18 13:43:01 -04:00
44 lines
1.5 KiB
Rust
44 lines
1.5 KiB
Rust
use spacetimedb_schema::def::{ModuleDef, ReducerDef, ScopedTypeName, TableDef, TypeDef};
|
|
use spacetimedb_schema::identifier::Identifier;
|
|
|
|
mod code_indenter;
|
|
pub mod csharp;
|
|
pub mod rust;
|
|
pub mod typescript;
|
|
mod util;
|
|
|
|
pub use self::csharp::Csharp;
|
|
pub use self::rust::Rust;
|
|
pub use self::typescript::TypeScript;
|
|
pub use util::AUTO_GENERATED_PREFIX;
|
|
|
|
pub fn generate(module: &ModuleDef, lang: &dyn Lang) -> Vec<(String, String)> {
|
|
itertools::chain!(
|
|
module
|
|
.tables()
|
|
.map(|tbl| (lang.table_filename(module, tbl), lang.generate_table(module, tbl))),
|
|
module
|
|
.types()
|
|
.map(|typ| (lang.type_filename(&typ.name), lang.generate_type(module, typ))),
|
|
util::iter_reducers(module).map(|reducer| {
|
|
(
|
|
lang.reducer_filename(&reducer.name),
|
|
lang.generate_reducer(module, reducer),
|
|
)
|
|
}),
|
|
lang.generate_globals(module),
|
|
)
|
|
.collect()
|
|
}
|
|
|
|
pub trait Lang {
|
|
fn table_filename(&self, module: &ModuleDef, table: &TableDef) -> String;
|
|
fn type_filename(&self, type_name: &ScopedTypeName) -> String;
|
|
fn reducer_filename(&self, reducer_name: &Identifier) -> String;
|
|
|
|
fn generate_table(&self, module: &ModuleDef, tbl: &TableDef) -> String;
|
|
fn generate_type(&self, module: &ModuleDef, typ: &TypeDef) -> String;
|
|
fn generate_reducer(&self, module: &ModuleDef, reducer: &ReducerDef) -> String;
|
|
fn generate_globals(&self, module: &ModuleDef) -> Vec<(String, String)>;
|
|
}
|