/
lib.rs
47 lines (38 loc) 路 1.5 KB
/
lib.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
mod ast_builders;
mod serialization_ast;
pub use serialization_ast::DataModelMetaFormat;
use ast_builders::{schema_to_dmmf, DmmfQuerySchemaRenderer};
use schema::{QuerySchemaRef, QuerySchemaRenderer};
use std::sync::Arc;
pub fn dmmf_json_from_schema(schema: &str) -> String {
let dmmf = dmmf_from_schema(schema);
serde_json::to_string(&dmmf).unwrap()
}
// enable raw param?
pub fn dmmf_from_schema(schema: &str) -> DataModelMetaFormat {
let schema = psl::parse_schema_parserdb(schema).unwrap();
let config = &schema.configuration;
let dml = psl::lift(&schema);
// We only support one data source at the moment, so take the first one (default not exposed yet).
let data_source = config.datasources.first().unwrap();
let preview_features: Vec<_> = config.preview_features().iter().collect();
let internal_data_model = prisma_models::convert(&schema, "dummy".to_owned());
// Construct query schema
let query_schema = Arc::new(schema_builder::build(
internal_data_model,
true, // todo
data_source.active_connector,
preview_features,
data_source.referential_integrity(),
));
from_precomputed_parts(&dml, query_schema)
}
pub fn from_precomputed_parts(dml: &psl::dml::Datamodel, query_schema: QuerySchemaRef) -> DataModelMetaFormat {
let (schema, mappings) = DmmfQuerySchemaRenderer::render(query_schema);
let data_model = schema_to_dmmf(dml);
DataModelMetaFormat {
data_model,
schema,
mappings,
}
}