mirror of
https://github.com/capnproto/pycapnp.git
synced 2025-03-04 08:24:43 +01:00
Add native types under capnp.types
for use with ListSchema
This commit is contained in:
parent
977f471dec
commit
42c0424e6e
4 changed files with 115 additions and 0 deletions
|
@ -133,8 +133,32 @@ cdef extern from "kj/async-io.h" namespace " ::kj":
|
||||||
|
|
||||||
AsyncIoContext setupAsyncIo()
|
AsyncIoContext setupAsyncIo()
|
||||||
|
|
||||||
|
cdef extern from "capnp/schema.capnp.h" namespace " ::capnp":
|
||||||
|
enum TypeWhich" ::capnp::schema::Type::Which":
|
||||||
|
TypeWhichVOID " ::capnp::schema::Type::Which::VOID"
|
||||||
|
TypeWhichBOOL " ::capnp::schema::Type::Which::BOOL"
|
||||||
|
TypeWhichINT8 " ::capnp::schema::Type::Which::INT8"
|
||||||
|
TypeWhichINT16 " ::capnp::schema::Type::Which::INT16"
|
||||||
|
TypeWhichINT32 " ::capnp::schema::Type::Which::INT32"
|
||||||
|
TypeWhichINT64 " ::capnp::schema::Type::Which::INT64"
|
||||||
|
TypeWhichUINT8 " ::capnp::schema::Type::Which::UINT8"
|
||||||
|
TypeWhichUINT16 " ::capnp::schema::Type::Which::UINT16"
|
||||||
|
TypeWhichUINT32 " ::capnp::schema::Type::Which::UINT32"
|
||||||
|
TypeWhichUINT64 " ::capnp::schema::Type::Which::UINT64"
|
||||||
|
TypeWhichFLOAT32 " ::capnp::schema::Type::Which::FLOAT32"
|
||||||
|
TypeWhichFLOAT64 " ::capnp::schema::Type::Which::FLOAT64"
|
||||||
|
TypeWhichTEXT " ::capnp::schema::Type::Which::TEXT"
|
||||||
|
TypeWhichDATA " ::capnp::schema::Type::Which::DATA"
|
||||||
|
TypeWhichLIST " ::capnp::schema::Type::Which::LIST"
|
||||||
|
TypeWhichENUM " ::capnp::schema::Type::Which::ENUM"
|
||||||
|
TypeWhichSTRUCT " ::capnp::schema::Type::Which::STRUCT"
|
||||||
|
TypeWhichINTERFACE " ::capnp::schema::Type::Which::INTERFACE"
|
||||||
|
TypeWhichANY_POINTER " ::capnp::schema::Type::Which::ANY_POINTER"
|
||||||
|
|
||||||
cdef extern from "capnp/schema.h" namespace " ::capnp":
|
cdef extern from "capnp/schema.h" namespace " ::capnp":
|
||||||
cdef cppclass SchemaType" ::capnp::Type":
|
cdef cppclass SchemaType" ::capnp::Type":
|
||||||
|
SchemaType()
|
||||||
|
SchemaType(TypeWhich)
|
||||||
cbool isList()
|
cbool isList()
|
||||||
cbool isEnum()
|
cbool isEnum()
|
||||||
cbool isStruct()
|
cbool isStruct()
|
||||||
|
@ -221,6 +245,7 @@ cdef extern from "capnp/schema.h" namespace " ::capnp":
|
||||||
ListSchema listSchemaOfEnum" ::capnp::ListSchema::of"(EnumSchema)
|
ListSchema listSchemaOfEnum" ::capnp::ListSchema::of"(EnumSchema)
|
||||||
ListSchema listSchemaOfInterface" ::capnp::ListSchema::of"(InterfaceSchema)
|
ListSchema listSchemaOfInterface" ::capnp::ListSchema::of"(InterfaceSchema)
|
||||||
ListSchema listSchemaOfList" ::capnp::ListSchema::of"(ListSchema)
|
ListSchema listSchemaOfList" ::capnp::ListSchema::of"(ListSchema)
|
||||||
|
ListSchema listSchemaOfType" ::capnp::ListSchema::of"(SchemaType)
|
||||||
|
|
||||||
cdef cppclass ConstSchema:
|
cdef cppclass ConstSchema:
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -2619,6 +2619,86 @@ cdef class _EnumSchema:
|
||||||
def __get__(self):
|
def __get__(self):
|
||||||
return _DynamicStructReader()._init(self.thisptr.getProto(), self)
|
return _DynamicStructReader()._init(self.thisptr.getProto(), self)
|
||||||
|
|
||||||
|
cdef class _SchemaType:
|
||||||
|
cdef capnp.SchemaType thisptr
|
||||||
|
|
||||||
|
types = _ModuleType('capnp.types')
|
||||||
|
cdef _SchemaType _void = _SchemaType()
|
||||||
|
_void.thisptr = capnp.SchemaType(capnp.TypeWhichVOID)
|
||||||
|
types.Void = _void
|
||||||
|
|
||||||
|
cdef _SchemaType _bool = _SchemaType()
|
||||||
|
_bool.thisptr = capnp.SchemaType(capnp.TypeWhichBOOL)
|
||||||
|
types.Bool = _bool
|
||||||
|
|
||||||
|
cdef _SchemaType _int8 = _SchemaType()
|
||||||
|
_int8.thisptr = capnp.SchemaType(capnp.TypeWhichINT8)
|
||||||
|
types.Int8 = _int8
|
||||||
|
|
||||||
|
cdef _SchemaType _int16 = _SchemaType()
|
||||||
|
_int16.thisptr = capnp.SchemaType(capnp.TypeWhichINT16)
|
||||||
|
types.Int16 = _int16
|
||||||
|
|
||||||
|
cdef _SchemaType _int32 = _SchemaType()
|
||||||
|
_int32.thisptr = capnp.SchemaType(capnp.TypeWhichINT32)
|
||||||
|
types.Int32 = _int32
|
||||||
|
|
||||||
|
cdef _SchemaType _int64 = _SchemaType()
|
||||||
|
_int64.thisptr = capnp.SchemaType(capnp.TypeWhichINT64)
|
||||||
|
types.Int64 = _int64
|
||||||
|
|
||||||
|
cdef _SchemaType _uint8 = _SchemaType()
|
||||||
|
_uint8.thisptr = capnp.SchemaType(capnp.TypeWhichUINT8)
|
||||||
|
types.UInt8 = _uint8
|
||||||
|
|
||||||
|
cdef _SchemaType _uint16 = _SchemaType()
|
||||||
|
_uint16.thisptr = capnp.SchemaType(capnp.TypeWhichUINT16)
|
||||||
|
types.UInt16 = _uint16
|
||||||
|
|
||||||
|
cdef _SchemaType _uint32 = _SchemaType()
|
||||||
|
_uint32.thisptr = capnp.SchemaType(capnp.TypeWhichUINT32)
|
||||||
|
types.UInt32 = _uint32
|
||||||
|
|
||||||
|
cdef _SchemaType _uint64 = _SchemaType()
|
||||||
|
_uint64.thisptr = capnp.SchemaType(capnp.TypeWhichUINT64)
|
||||||
|
types.UInt64 = _uint64
|
||||||
|
|
||||||
|
cdef _SchemaType _float32 = _SchemaType()
|
||||||
|
_float32.thisptr = capnp.SchemaType(capnp.TypeWhichFLOAT32)
|
||||||
|
types.Float32 = _float32
|
||||||
|
|
||||||
|
cdef _SchemaType _float64 = _SchemaType()
|
||||||
|
_float64.thisptr = capnp.SchemaType(capnp.TypeWhichFLOAT64)
|
||||||
|
types.Float64 = _float64
|
||||||
|
|
||||||
|
cdef _SchemaType _text = _SchemaType()
|
||||||
|
_text.thisptr = capnp.SchemaType(capnp.TypeWhichTEXT)
|
||||||
|
types.Text = _text
|
||||||
|
|
||||||
|
cdef _SchemaType _data = _SchemaType()
|
||||||
|
_data.thisptr = capnp.SchemaType(capnp.TypeWhichDATA)
|
||||||
|
types.Data = _data
|
||||||
|
|
||||||
|
# cdef _SchemaType _list = _SchemaType()
|
||||||
|
# _list.thisptr = capnp.SchemaType(capnp.TypeWhichLIST)
|
||||||
|
# types.list = _list
|
||||||
|
|
||||||
|
cdef _SchemaType _enum = _SchemaType()
|
||||||
|
_enum.thisptr = capnp.SchemaType(capnp.TypeWhichENUM)
|
||||||
|
types.Enum = _enum
|
||||||
|
|
||||||
|
# cdef _SchemaType _struct = _SchemaType()
|
||||||
|
# _struct.thisptr = capnp.SchemaType(capnp.TypeWhichSTRUCT)
|
||||||
|
# types.struct = _struct
|
||||||
|
|
||||||
|
# cdef _SchemaType _interface = _SchemaType()
|
||||||
|
# _interface.thisptr = capnp.SchemaType(capnp.TypeWhichINTERFACE)
|
||||||
|
# types.interface = _interface
|
||||||
|
|
||||||
|
cdef _SchemaType _any_pointer = _SchemaType()
|
||||||
|
_any_pointer.thisptr = capnp.SchemaType(capnp.TypeWhichANY_POINTER)
|
||||||
|
types.AnyPointer = _any_pointer
|
||||||
|
|
||||||
cdef class ListSchema:
|
cdef class ListSchema:
|
||||||
cdef C_ListSchema thisptr
|
cdef C_ListSchema thisptr
|
||||||
|
|
||||||
|
@ -2627,6 +2707,7 @@ cdef class ListSchema:
|
||||||
cdef _EnumSchema es
|
cdef _EnumSchema es
|
||||||
cdef _InterfaceSchema iis
|
cdef _InterfaceSchema iis
|
||||||
cdef ListSchema ls
|
cdef ListSchema ls
|
||||||
|
cdef _SchemaType st
|
||||||
|
|
||||||
if schema is not None:
|
if schema is not None:
|
||||||
if hasattr(schema, 'schema'):
|
if hasattr(schema, 'schema'):
|
||||||
|
@ -2647,6 +2728,9 @@ cdef class ListSchema:
|
||||||
elif typeSchema is ListSchema:
|
elif typeSchema is ListSchema:
|
||||||
ls = s
|
ls = s
|
||||||
self.thisptr = capnp.listSchemaOfList(ls.thisptr)
|
self.thisptr = capnp.listSchemaOfList(ls.thisptr)
|
||||||
|
elif typeSchema is _SchemaType:
|
||||||
|
st = s
|
||||||
|
self.thisptr = capnp.listSchemaOfType(st.thisptr)
|
||||||
else:
|
else:
|
||||||
raise ValueError("Unknown schema type")
|
raise ValueError("Unknown schema type")
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,11 @@ struct AnnotationStruct {
|
||||||
annotation test1(*): Text;
|
annotation test1(*): Text;
|
||||||
annotation test2(*): AnnotationStruct;
|
annotation test2(*): AnnotationStruct;
|
||||||
annotation test3(*): List(AnnotationStruct);
|
annotation test3(*): List(AnnotationStruct);
|
||||||
|
annotation test4(*): List(UInt16);
|
||||||
|
|
||||||
$test1("TestFile");
|
$test1("TestFile");
|
||||||
|
|
||||||
struct TestAnnotationOne $test1("Test") { }
|
struct TestAnnotationOne $test1("Test") { }
|
||||||
struct TestAnnotationTwo $test2(test = 100) { }
|
struct TestAnnotationTwo $test2(test = 100) { }
|
||||||
struct TestAnnotationThree $test3([(test=100), (test=101)]) { }
|
struct TestAnnotationThree $test3([(test=100), (test=101)]) { }
|
||||||
|
struct TestAnnotationFour $test4([200, 201]) { }
|
||||||
|
|
|
@ -44,3 +44,7 @@ def test_annotations(annotations):
|
||||||
assert annotation_list[0].test == 100
|
assert annotation_list[0].test == 100
|
||||||
assert annotation_list[1].test == 101
|
assert annotation_list[1].test == 101
|
||||||
|
|
||||||
|
annotation = annotations.TestAnnotationFour.schema.node.annotations[0]
|
||||||
|
annotation_list = annotation.value.list.as_list(capnp.ListSchema(capnp.types.UInt16))
|
||||||
|
assert annotation_list[0] == 200
|
||||||
|
assert annotation_list[1] == 201
|
||||||
|
|
Loading…
Add table
Reference in a new issue