This commit is contained in:
parent
0894b15c65
commit
ecb4f51997
|
@ -15,12 +15,28 @@ pub enum CompressionCode {
|
||||||
|
|
||||||
impl From<servicepoint::CompressionCode> for CompressionCode {
|
impl From<servicepoint::CompressionCode> for CompressionCode {
|
||||||
fn from(value: servicepoint::CompressionCode) -> Self {
|
fn from(value: servicepoint::CompressionCode) -> Self {
|
||||||
value.into()
|
match value {
|
||||||
|
servicepoint::CompressionCode::Uncompressed => {
|
||||||
|
CompressionCode::Uncompressed
|
||||||
|
}
|
||||||
|
servicepoint::CompressionCode::Zlib => CompressionCode::Zlib,
|
||||||
|
servicepoint::CompressionCode::Bzip2 => CompressionCode::Bzip2,
|
||||||
|
servicepoint::CompressionCode::Lzma => CompressionCode::Lzma,
|
||||||
|
servicepoint::CompressionCode::Zstd => CompressionCode::Zstd,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<CompressionCode> for servicepoint::CompressionCode {
|
impl From<CompressionCode> for servicepoint::CompressionCode {
|
||||||
fn from(value: CompressionCode) -> Self {
|
fn from(value: CompressionCode) -> Self {
|
||||||
servicepoint::CompressionCode::try_from(value).unwrap()
|
match value {
|
||||||
|
CompressionCode::Uncompressed => {
|
||||||
|
servicepoint::CompressionCode::Uncompressed
|
||||||
|
}
|
||||||
|
CompressionCode::Zlib => servicepoint::CompressionCode::Zlib,
|
||||||
|
CompressionCode::Bzip2 => servicepoint::CompressionCode::Bzip2,
|
||||||
|
CompressionCode::Lzma => servicepoint::CompressionCode::Lzma,
|
||||||
|
CompressionCode::Zstd => servicepoint::CompressionCode::Zstd,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,14 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
containers::{cp437_grid::Cp437Grid, wrap_width_height},
|
containers::{cp437_grid::Cp437Grid, wrap_width_height},
|
||||||
|
errors::ServicePointError,
|
||||||
macros::wrap_object,
|
macros::wrap_object,
|
||||||
};
|
};
|
||||||
use servicepoint::{Grid, SetValueSeriesError};
|
use servicepoint::{Grid, SetValueSeriesError};
|
||||||
use std::{convert::Into, sync::Arc};
|
use std::sync::Arc;
|
||||||
|
|
||||||
wrap_object!(CharGrid);
|
wrap_object!(CharGrid);
|
||||||
wrap_width_height!(CharGrid);
|
wrap_width_height!(CharGrid);
|
||||||
|
|
||||||
#[derive(uniffi::Error, thiserror::Error, Debug)]
|
|
||||||
pub enum CharGridError {
|
|
||||||
#[error("Exactly one character was expected, but {value:?} was provided")]
|
|
||||||
StringNotOneChar { value: String },
|
|
||||||
#[error("The provided series was expected to have a length of {expected}, but was {actual}")]
|
|
||||||
InvalidSeriesLength { actual: u64, expected: u64 },
|
|
||||||
#[error("The index {index} was out of bounds for size {size}")]
|
|
||||||
OutOfBounds { index: u64, size: u64 },
|
|
||||||
}
|
|
||||||
|
|
||||||
#[uniffi::export]
|
#[uniffi::export]
|
||||||
impl CharGrid {
|
impl CharGrid {
|
||||||
#[uniffi::constructor]
|
#[uniffi::constructor]
|
||||||
|
@ -38,17 +29,23 @@ impl CharGrid {
|
||||||
x: u64,
|
x: u64,
|
||||||
y: u64,
|
y: u64,
|
||||||
value: String,
|
value: String,
|
||||||
) -> Result<(), CharGridError> {
|
) -> Result<(), ServicePointError> {
|
||||||
let value = Self::str_to_char(value)?;
|
let value = Self::str_to_char(value)?;
|
||||||
self.write().set(x as usize, y as usize, value);
|
if self.write().set_optional(x as isize, y as isize, value) {
|
||||||
Ok(())
|
Ok(())
|
||||||
|
} else {
|
||||||
|
Err(ServicePointError::OutOfBounds)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get(&self, x: u64, y: u64) -> String {
|
pub fn get(&self, x: u64, y: u64) -> Result<String, ServicePointError> {
|
||||||
self.read().get(x as usize, y as usize).into()
|
self.read()
|
||||||
|
.get_optional(x as isize, y as isize)
|
||||||
|
.ok_or(ServicePointError::OutOfBounds)
|
||||||
|
.map(String::from)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fill(&self, value: String) -> Result<(), CharGridError> {
|
pub fn fill(&self, value: String) -> Result<(), ServicePointError> {
|
||||||
let value = Self::str_to_char(value)?;
|
let value = Self::str_to_char(value)?;
|
||||||
self.write().fill(value);
|
self.write().fill(value);
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -59,36 +56,38 @@ impl CharGrid {
|
||||||
String::from(&*grid)
|
String::from(&*grid)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_row(&self, y: u64, row: String) -> Result<(), CharGridError> {
|
pub fn set_row(
|
||||||
|
&self,
|
||||||
|
y: u64,
|
||||||
|
row: String,
|
||||||
|
) -> Result<(), ServicePointError> {
|
||||||
self.write()
|
self.write()
|
||||||
.set_row(y as usize, &row.chars().collect::<Vec<_>>())
|
.set_row(y as usize, &row.chars().collect::<Vec<_>>())
|
||||||
.map_err(CharGridError::from)
|
.map_err(ServicePointError::from)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_col(&self, x: u64, col: String) -> Result<(), CharGridError> {
|
pub fn set_col(
|
||||||
|
&self,
|
||||||
|
x: u64,
|
||||||
|
col: String,
|
||||||
|
) -> Result<(), ServicePointError> {
|
||||||
self.write()
|
self.write()
|
||||||
.set_row(x as usize, &col.chars().collect::<Vec<_>>())
|
.set_row(x as usize, &col.chars().collect::<Vec<_>>())
|
||||||
.map_err(CharGridError::from)
|
.map_err(ServicePointError::from)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_row(&self, y: u64) -> Result<String, CharGridError> {
|
pub fn get_row(&self, y: u64) -> Result<String, ServicePointError> {
|
||||||
self.read()
|
self.read()
|
||||||
.get_row(y as usize)
|
.get_row(y as usize)
|
||||||
.map(String::from_iter)
|
.map(String::from_iter)
|
||||||
.ok_or(CharGridError::OutOfBounds {
|
.ok_or(ServicePointError::OutOfBounds)
|
||||||
index: y,
|
|
||||||
size: self.height(),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_col(&self, x: u64) -> Result<String, CharGridError> {
|
pub fn get_col(&self, x: u64) -> Result<String, ServicePointError> {
|
||||||
self.read()
|
self.read()
|
||||||
.get_col(x as usize)
|
.get_col(x as usize)
|
||||||
.map(String::from_iter)
|
.map(String::from_iter)
|
||||||
.ok_or(CharGridError::OutOfBounds {
|
.ok_or(ServicePointError::OutOfBounds)
|
||||||
index: x,
|
|
||||||
size: self.width(),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_cp437(&self) -> Arc<Cp437Grid> {
|
pub fn to_cp437(&self) -> Arc<Cp437Grid> {
|
||||||
|
@ -97,9 +96,9 @@ impl CharGrid {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CharGrid {
|
impl CharGrid {
|
||||||
fn str_to_char(value: String) -> Result<char, CharGridError> {
|
fn str_to_char(value: String) -> Result<char, ServicePointError> {
|
||||||
if value.len() != 1 {
|
if value.len() != 1 {
|
||||||
return Err(CharGridError::StringNotOneChar { value });
|
return Err(ServicePointError::StringNotOneChar { value });
|
||||||
}
|
}
|
||||||
|
|
||||||
let value = value.chars().nth(0).unwrap();
|
let value = value.chars().nth(0).unwrap();
|
||||||
|
@ -107,17 +106,14 @@ impl CharGrid {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<SetValueSeriesError> for CharGridError {
|
impl From<SetValueSeriesError> for ServicePointError {
|
||||||
fn from(e: SetValueSeriesError) -> Self {
|
fn from(e: SetValueSeriesError) -> Self {
|
||||||
match e {
|
match e {
|
||||||
SetValueSeriesError::OutOfBounds { index, size } => {
|
SetValueSeriesError::OutOfBounds { .. } => {
|
||||||
CharGridError::OutOfBounds {
|
ServicePointError::OutOfBounds
|
||||||
index: index as u64,
|
|
||||||
size: size as u64,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
SetValueSeriesError::InvalidLength { actual, expected } => {
|
SetValueSeriesError::InvalidLength { actual, expected } => {
|
||||||
CharGridError::InvalidSeriesLength {
|
ServicePointError::InvalidSeriesLength {
|
||||||
actual: actual as u64,
|
actual: actual as u64,
|
||||||
expected: expected as u64,
|
expected: expected as u64,
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,4 +6,10 @@ pub enum ServicePointError {
|
||||||
InvalidBrightness { value: u8 },
|
InvalidBrightness { value: u8 },
|
||||||
#[error("The provided packet is invalid or a conversion to packet failed")]
|
#[error("The provided packet is invalid or a conversion to packet failed")]
|
||||||
InvalidPacket,
|
InvalidPacket,
|
||||||
|
#[error("Exactly one character was expected, but {value:?} was provided")]
|
||||||
|
StringNotOneChar { value: String },
|
||||||
|
#[error("The provided series was expected to have a length of {expected}, but was {actual}")]
|
||||||
|
InvalidSeriesLength { actual: u64, expected: u64 },
|
||||||
|
#[error("The index was out of bounds")]
|
||||||
|
OutOfBounds,
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,3 +4,10 @@ wrap_object!(Packet);
|
||||||
wrap_object!(Header);
|
wrap_object!(Header);
|
||||||
|
|
||||||
wrap_object_attr_wrapped!(Packet, header, Header);
|
wrap_object_attr_wrapped!(Packet, header, Header);
|
||||||
|
|
||||||
|
#[uniffi::export]
|
||||||
|
impl Packet {
|
||||||
|
pub fn as_bytes(&self) -> Vec<u8> {
|
||||||
|
Vec::from(&*self.read())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue