-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdynamic-struct-reader.cpp
More file actions
42 lines (33 loc) · 1.23 KB
/
dynamic-struct-reader.cpp
File metadata and controls
42 lines (33 loc) · 1.23 KB
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
#include <iostream>
#include "dynamic-struct-reader.h"
#include "dynamic-value-converter.h"
namespace capnp_php {
DynamicStructReader::DynamicStructReader(capnp::DynamicStruct::Reader reader,
Php::Object messageReader)
: Php::Base(),
messageReader(messageReader),
reader(reader)
{
}
Php::Value DynamicStructReader::__get(const Php::Value& name) {
auto schema = reader.getSchema();
//Php::out << "DynamicStructReader = " << (void*)this
//<< ", schema=" << (void*)&schema
//<< ", name=" << name << std::endl;
KJ_IF_MAYBE(field, schema.findFieldByName(name.stringValue())) {
//Php::out << "field=" << (void*)&(*field) << ", name=" << name.stringValue() << std::endl;
return DynamicValueConverter::convertFromCapnp(
reader.get(*field), this);
}
return Php::Base::__get(name);
}
Php::Value DynamicStructReader::which() {
Php::Value result;
auto schema_maybe = reader.which();
KJ_IF_MAYBE(schema, schema_maybe) {
auto name = schema->getProto().getName();
result = Php::Value(name.begin(), name.size());
}
return result;
}
}