servicepoint-binding-uniffi/src/commands/bitvec.rs
Vinzenz Schroeter f4c7519658 export some builtin traits,
brightness conversion fails for invalid values,

macros for wrapping attrs
2025-09-28 23:14:11 +02:00

52 lines
1.4 KiB
Rust

use crate::{
commands::wrap_command, compression_code::CompressionCode,
containers::bitvec::BitVec, macros::wrap_object_attr_wrapped,
};
use std::sync::Arc;
wrap_command!(BitVecCommand);
wrap_object_attr_wrapped!(BitVecCommand, bitvec, BitVec);
#[uniffi::export]
impl BitVecCommand {
#[uniffi::constructor]
pub fn new(
offset: u64,
bitvec: &Arc<BitVec>,
compression: CompressionCode,
operation: BinaryOperation,
) -> Arc<Self> {
let offset = offset as usize;
let bitvec = bitvec.read().clone();
let compression = compression.into();
let operation = operation.into();
let actual = servicepoint::BitVecCommand {
offset,
bitvec,
compression,
operation,
};
Self::internal_new(actual)
}
}
#[derive(uniffi::Enum)]
pub enum BinaryOperation {
Overwrite,
And,
Or,
Xor,
}
impl From<BinaryOperation> for servicepoint::BinaryOperation {
fn from(op: BinaryOperation) -> Self {
match op {
BinaryOperation::Overwrite => {
servicepoint::BinaryOperation::Overwrite
}
BinaryOperation::And => servicepoint::BinaryOperation::And,
BinaryOperation::Or => servicepoint::BinaryOperation::Or,
BinaryOperation::Xor => servicepoint::BinaryOperation::Xor,
}
}
}