baobao_codegen_typescript/
type_mapper.rs1use baobao_codegen::TypeMapper;
4use baobao_core::{ArgType, ContextFieldType, DatabaseType};
5
6pub struct TypeScriptTypeMapper;
8
9impl TypeMapper for TypeScriptTypeMapper {
10 fn language(&self) -> &'static str {
11 "typescript"
12 }
13
14 fn map_arg_type(&self, arg_type: ArgType) -> &'static str {
15 match arg_type {
16 ArgType::String => "string",
17 ArgType::Int => "number",
18 ArgType::Float => "number",
19 ArgType::Bool => "boolean",
20 ArgType::Path => "string",
21 }
22 }
23
24 fn map_optional_arg_type(&self, arg_type: ArgType) -> String {
25 format!("{} | undefined", self.map_arg_type(arg_type))
26 }
27
28 fn map_context_type(&self, field_type: &ContextFieldType) -> &'static str {
29 match field_type {
30 ContextFieldType::Database(DatabaseType::Sqlite) => "Database",
32 ContextFieldType::Database(DatabaseType::Postgres) => "unknown",
34 ContextFieldType::Database(DatabaseType::Mysql) => "unknown",
35 ContextFieldType::Http => "unknown",
36 }
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_typescript_arg_types() {
46 let mapper = TypeScriptTypeMapper;
47
48 assert_eq!(mapper.map_arg_type(ArgType::String), "string");
49 assert_eq!(mapper.map_arg_type(ArgType::Int), "number");
50 assert_eq!(mapper.map_arg_type(ArgType::Float), "number");
51 assert_eq!(mapper.map_arg_type(ArgType::Bool), "boolean");
52 assert_eq!(mapper.map_arg_type(ArgType::Path), "string");
53 }
54
55 #[test]
56 fn test_typescript_optional_types() {
57 let mapper = TypeScriptTypeMapper;
58
59 assert_eq!(
60 mapper.map_optional_arg_type(ArgType::String),
61 "string | undefined"
62 );
63 assert_eq!(
64 mapper.map_optional_arg_type(ArgType::Int),
65 "number | undefined"
66 );
67 }
68
69 #[test]
70 fn test_typescript_context_types() {
71 let mapper = TypeScriptTypeMapper;
72
73 assert_eq!(
74 mapper.map_context_type(&ContextFieldType::Database(DatabaseType::Sqlite)),
75 "Database"
76 );
77 }
78}