error trait
This commit is contained in:
parent
f16c9de3d5
commit
3ab9778ea1
3
Cargo.lock
generated
3
Cargo.lock
generated
|
@ -40,6 +40,9 @@ checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
|
|||
[[package]]
|
||||
name = "audio_interface"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"std",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
|
|
|
@ -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" }
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
// }
|
||||
// }
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue