summaryrefslogtreecommitdiff
path: root/rust/src/types.rs
diff options
context:
space:
mode:
authorGlenn Smith <glenn@vector35.com>2023-08-16 17:34:39 -0400
committerGlenn Smith <glenn@vector35.com>2023-08-16 17:34:39 -0400
commit5823930694686322430747031324833666177725 (patch)
treea20930a37a49eee0f0ecc0d287049e2b34825b73 /rust/src/types.rs
parente613b78c2fda396ffb7d54261681db88a788bd87 (diff)
Add DefineUserTypes to Rust/Python (+ fix return type)
Diffstat (limited to 'rust/src/types.rs')
-rw-r--r--rust/src/types.rs64
1 files changed, 64 insertions, 0 deletions
diff --git a/rust/src/types.rs b/rust/src/types.rs
index 9d9e25cb..b2c15ab8 100644
--- a/rust/src/types.rs
+++ b/rust/src/types.rs
@@ -2283,6 +2283,24 @@ impl Drop for QualifiedName {
}
}
+impl CoreArrayProvider for QualifiedName {
+ type Raw = BNQualifiedName;
+ type Context = ();
+}
+unsafe impl CoreOwnedArrayProvider for QualifiedName {
+ unsafe fn free(raw: *mut Self::Raw, count: usize, _context: &Self::Context) {
+ BNFreeTypeNameList(raw, count);
+ }
+}
+
+unsafe impl<'a> CoreArrayWrapper<'a> for QualifiedName {
+ type Wrapped = &'a QualifiedName;
+
+ unsafe fn wrap_raw(raw: &'a Self::Raw, _context: &'a Self::Context) -> Self::Wrapped {
+ mem::transmute(raw)
+ }
+}
+
//////////////////////////
// QualifiedNameAndType
@@ -2326,6 +2344,52 @@ unsafe impl<'a> CoreArrayWrapper<'a> for QualifiedNameAndType {
}
//////////////////////////
+// QualifiedNameTypeAndId
+
+#[repr(transparent)]
+pub struct QualifiedNameTypeAndId(pub(crate) BNQualifiedNameTypeAndId);
+
+impl QualifiedNameTypeAndId {
+ pub fn name(&self) -> &QualifiedName {
+ unsafe { mem::transmute(&self.0.name) }
+ }
+
+ pub fn id(&self) -> &BnStr {
+ unsafe { BnStr::from_raw(self.0.id) }
+ }
+
+ pub fn type_object(&self) -> Guard<Type> {
+ unsafe { Guard::new(Type::from_raw(self.0.type_), self) }
+ }
+}
+
+impl Drop for QualifiedNameTypeAndId {
+ fn drop(&mut self) {
+ unsafe {
+ BNFreeQualifiedNameTypeAndId(&mut self.0);
+ }
+ }
+}
+
+impl CoreArrayProvider for QualifiedNameTypeAndId {
+ type Raw = BNQualifiedNameTypeAndId;
+ type Context = ();
+}
+unsafe impl CoreOwnedArrayProvider for QualifiedNameTypeAndId {
+ unsafe fn free(raw: *mut Self::Raw, count: usize, _context: &Self::Context) {
+ BNFreeTypeIdList(raw, count);
+ }
+}
+
+unsafe impl<'a> CoreArrayWrapper<'a> for QualifiedNameTypeAndId {
+ type Wrapped = &'a QualifiedNameTypeAndId;
+
+ unsafe fn wrap_raw(raw: &'a Self::Raw, _context: &'a Self::Context) -> Self::Wrapped {
+ mem::transmute(raw)
+ }
+}
+
+//////////////////////////
// NameAndType
pub struct NameAndType<S: BnStrCompatible> {