-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathclass.rs
76 lines (74 loc) · 3 KB
/
class.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
use php_codegen::class::Class;
use php_codegen::data_type::DataType;
use php_codegen::file::File;
use php_codegen::literal::Value;
use php_codegen::modifiers::VisibilityModifier;
use php_codegen::property::Property;
use php_codegen::property::PropertyHook;
use php_codegen::property::PropertySetHookParameter;
fn main() {
let file = File::new()
.namespaced("App")
.declare("strict_types", 1)
// A class that uses property hooks
.class(
Class::new("SimpleUser")
.property(
Property::new("firstName")
.typed(DataType::String)
.visibility(VisibilityModifier::Private)
.default(Value::String("Jane".to_string())),
)
.property(
Property::new("lastName")
.typed(DataType::String)
.visibility(VisibilityModifier::Private)
.default(Value::String("Doe".to_string())),
)
.property(
Property::new("fullname")
.typed(DataType::String)
.visibility(VisibilityModifier::Public)
.hook(PropertyHook::Get(
false,
vec!["return $this->firstName . ' ' . $this->lastName;"].into(),
))
.hook(PropertyHook::Set(
Some(
PropertySetHookParameter::new("$fullname").typed(DataType::String),
),
vec![
"[$first, $last] = explode(' ', $fullname);",
"$this->firstName = $first;",
"$this->lastName = $last;",
]
.into(),
)),
),
)
.class(
Class::new("SimpleUser2")
.property(
Property::new("firstName")
.typed(DataType::String)
.visibility(VisibilityModifier::Private)
.default(Value::String("Jane".to_string())),
)
.property(
Property::new("lastName")
.typed(DataType::String)
.visibility(VisibilityModifier::Private)
.default(Value::String("Doe".to_string())),
)
.property(
Property::new("fullname")
.typed(DataType::String)
.visibility(VisibilityModifier::Public)
.hook(PropertyHook::Get(
false,
vec!["return $this->firstName . ' ' . $this->lastName;"].into(),
)),
),
);
print!("{file}");
}