userspace/file/traits/
readable.rs

1pub trait Readable<Origin> {
2    type Origin;
3    fn read_from_path(path: &str, offset: usize, endianness: bool) -> Self;
4    fn read_from_descriptor(file_descriptor: isize, offset: usize, endianness: bool) -> Self;
5    fn read_from_pointer(ptr: *const u8, offset: usize, endianness: bool) -> Self;
6}
7
8impl<U> Readable<crate::Origin> for U
9where
10    U: ample::traits::Bytes<crate::Origin, crate::Origin>,
11    U: Default,
12{
13    type Origin = crate::Origin;
14
15    fn read_from_path(path: &str, offset: usize, endianness: bool) -> Self {
16        let file_descriptor = crate::file::open(path);
17        Self::read_from_descriptor(file_descriptor, offset, endianness)
18    }
19
20    fn read_from_descriptor(file_descriptor: isize, offset: usize, endianness: bool) -> Self
21    where
22        Self: ample::traits::Bytes<crate::Origin, crate::Origin>, // [(); <Self as ample::traits::Bytes<crate::Origin, crate::Origin>>::BYTES_SIZE]:,
23    {
24        // let _ = crate::file::seek(file_descriptor, offset as i64);
25        // let size = 10; // <Self as ample::traits::Bytes<crate::Origin, crate::Origin>>::BYTES_SIZE;
26        // // let bytes = [0u8; <Self as ample::traits::Bytes<crate::Origin, crate::Origin>>::BYTES_SIZE];
27        // use crate::memory::heap::Allocating;
28        // let bytes = u8::allocate(size);
29        // let _ = crate::target::os::syscall::read(file_descriptor, bytes, size);
30        // Self::from_bytes_pointer(bytes, endianness)
31        Self::default()
32    }
33
34    fn read_from_pointer(ptr: *const u8, offset: usize, endianness: bool) -> Self {
35        Self::default()
36    }
37}
38
39impl<A> Readable<ample::Origin> for A
40where
41    A: crate::traits::Ample,
42    A: Default,
43{
44    type Origin = ample::Origin;
45
46    fn read_from_path(path: &str, offset: usize, endianness: bool) -> Self {
47        Self::default()
48    }
49
50    fn read_from_descriptor(fd: isize, offset: usize, endianness: bool) -> Self {
51        Self::default()
52    }
53
54    fn read_from_pointer(ptr: *const u8, offset: usize, endianness: bool) -> Self {
55        Self::default()
56    }
57}