error trait

pull/1/head
Able 2023-03-30 05:21:18 -05:00
parent b283da1b9a
commit 248f9442b9
7 changed files with 55 additions and 33 deletions

3
Cargo.lock generated
View File

@ -40,6 +40,9 @@ checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
[[package]]
name = "audio_interface"
version = "0.1.0"
dependencies = [
"std",
]
[[package]]
name = "base64"

View File

@ -6,3 +6,4 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
std = { path = "../std" }

View File

@ -1,3 +1,5 @@
#![no_std]
pub struct AudioObject {
// Play one bit per this interval
playback_speed: u64,
@ -11,22 +13,21 @@ impl AudioInterface for AudioObject {
}
fn play() -> Result<(), AudioErrors> {
todo!()
todo!();
Ok(())
}
fn stop() -> Result<(), AudioErrors> {
todo!()
todo!();
Ok(())
}
fn fill_playback_buffer(&mut self, playback_slice: [u8; 128]) -> Result<(), AudioErrors> {
todo!()
todo!();
Ok(())
}
}
pub enum AudioErrors {
EmptyPlaybackBuffer,
}
pub trait AudioInterface {
fn pause(&mut self) -> Result<(), AudioErrors>;
fn play() -> Result<(), AudioErrors>;
@ -36,3 +37,15 @@ pub trait AudioInterface {
fn fill_playback_buffer(&mut self, playback_slice: [u8; 128]) -> Result<(), AudioErrors>;
}
pub enum AudioErrors {
EmptyPlaybackBuffer = 1,
}
impl std::Error for AudioErrors {
fn id(&self) -> u128 {
match self {
AudioErrors::EmptyPlaybackBuffer => 1,
}
}
}

View File

@ -1,4 +1,4 @@
use crate::{exit::exit, Error};
use crate::exit::{exit, GenericError};
#[no_mangle]
unsafe extern "C" fn _start() -> ! {
@ -16,10 +16,10 @@ unsafe extern "C" fn _start() -> ! {
1 => {
// TODO: Get errorID location and error message
Some(Error {
Some(GenericError {
error_id: 123456789,
location: None,
a_lil_message_as_a_treat: "Unknown Cause",
// location: None,
// a_lil_message_as_a_treat: "Unknown Cause",
})
}
_ => panic!("Program returned an invalid isize"),

View File

@ -1,4 +1,18 @@
use crate::Error;
use crate::{Error, LocationInFile};
/// Exit a program
pub fn exit(error_code: Option<Error>) -> ! {}
pub fn exit(error_code: Option<impl Error>) -> ! {
loop {}
}
pub struct GenericError {
pub error_id: u128,
// location: LocationInFile<'a>,
// a_lil_message_as_a_treat: &'a str,
}
impl Error for GenericError {
fn id(&self) -> u128 {
self.error_id
}
}

View File

@ -2,11 +2,11 @@ pub enum IOErrors {
UnknownError,
}
pub struct Port<T> {
inner: T,
}
impl<T> Port<T> {
pub fn read(&self) -> Result<T, IOErrors> {
Ok(self.inner)
}
}
// pub struct Port<T> {
// inner: T,
// }
// impl<T> Port<T> {
// pub fn read(&self) -> Result<T, IOErrors> {
// Ok(self.inner)
// }
// }

View File

@ -58,21 +58,12 @@ pub struct LocationInFile<'a> {
line: u16,
column: u16,
}
impl<'a> Display for Error<'a> {
impl<'a> Display for LocationInFile<'a> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{}{}{}", self.file_path, self.line, self.column)
}
}
pub struct Error<'a> {
error_id: u128,
// Optional location of the error
location: Option<LocationInFile<'a>>,
a_lil_message_as_a_treat: &'a str,
}
impl<'a> Display for Error<'a> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "EID: {}\nSRC: {}", self.error_id, self.location)
}
pub trait Error {
fn id(&self) -> u128;
}