diff options
| author | Glenn Smith <glenn@vector35.com> | 2023-08-16 17:34:39 -0400 |
|---|---|---|
| committer | Glenn Smith <glenn@vector35.com> | 2023-08-16 17:34:39 -0400 |
| commit | 5823930694686322430747031324833666177725 (patch) | |
| tree | a20930a37a49eee0f0ecc0d287049e2b34825b73 /rust/src/types.rs | |
| parent | e613b78c2fda396ffb7d54261681db88a788bd87 (diff) | |
Add DefineUserTypes to Rust/Python (+ fix return type)
Diffstat (limited to 'rust/src/types.rs')
| -rw-r--r-- | rust/src/types.rs | 64 |
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> { |
