add server
This commit is contained in:
parent
c546ce40ed
commit
7583f7e557
5 changed files with 62 additions and 5 deletions
|
|
@ -9,6 +9,7 @@ pub mod threads;
|
||||||
|
|
||||||
pub mod auth;
|
pub mod auth;
|
||||||
pub mod authors;
|
pub mod authors;
|
||||||
|
pub mod files;
|
||||||
pub mod games;
|
pub mod games;
|
||||||
pub mod uploads;
|
pub mod uploads;
|
||||||
pub mod users;
|
pub mod users;
|
||||||
|
|
|
||||||
8
core/src/errors/files.rs
Normal file
8
core/src/errors/files.rs
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
use eva::data;
|
||||||
|
|
||||||
|
use crate::types::file;
|
||||||
|
|
||||||
|
#[data(copy, display("file {id} was not found"), error)]
|
||||||
|
pub struct NotFound {
|
||||||
|
pub id: file::Id,
|
||||||
|
}
|
||||||
|
|
@ -1 +1,23 @@
|
||||||
|
use eva::data;
|
||||||
|
|
||||||
|
use crate::{errors, types::file};
|
||||||
|
|
||||||
|
pub mod get_info {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[data]
|
||||||
|
pub struct Args {
|
||||||
|
pub id: file::Id,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[data]
|
||||||
|
pub struct Ok {
|
||||||
|
pub info: file::FileInfo,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[data(error)]
|
||||||
|
pub enum Err {
|
||||||
|
#[display("{_0}")]
|
||||||
|
NotFound(#[from] errors::files::NotFound),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ pub mod finish {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod cancel {
|
pub mod abort {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[data]
|
#[data]
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,36 @@
|
||||||
//! Basically same as [`entity::Id`], but additionally stores server where file is located in
|
//! Basically same as [`entity::Id`], but additionally stores server where file is located in
|
||||||
//! two lowest bits of random.
|
//! two lowest bits of random.
|
||||||
|
|
||||||
use std::{mem, num::NonZeroU128, str::FromStr};
|
use std::{
|
||||||
|
mem,
|
||||||
|
num::{NonZeroU64, NonZeroU128},
|
||||||
|
str::FromStr,
|
||||||
|
};
|
||||||
|
|
||||||
use crate::types::entity;
|
use crate::{
|
||||||
use eva::{data, hash::blake3, int, str, str::ToCompactString};
|
types::entity,
|
||||||
|
world::{World, WorldMut},
|
||||||
|
};
|
||||||
|
use eva::{data, hash::blake3, int, rand::Rng, str, str::ToCompactString, time::Clock};
|
||||||
|
|
||||||
pub type Hash = blake3::Hash;
|
pub type Hash = blake3::Hash;
|
||||||
|
|
||||||
|
#[data]
|
||||||
|
pub struct FileInfo {
|
||||||
|
pub id: Id,
|
||||||
|
pub format: FileFormat,
|
||||||
|
pub class: Class,
|
||||||
|
pub size: NonZeroU64,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[data(copy)]
|
||||||
|
pub enum FileFormat {
|
||||||
|
#[display("image:{_0}")]
|
||||||
|
Image(ImageFormat),
|
||||||
|
#[display("opaque")]
|
||||||
|
Opaque,
|
||||||
|
}
|
||||||
|
|
||||||
#[data(copy, ord, display(name))]
|
#[data(copy, ord, display(name))]
|
||||||
pub enum ImageFormat {
|
pub enum ImageFormat {
|
||||||
Png,
|
Png,
|
||||||
|
|
@ -109,6 +132,10 @@ entity::define_eid! {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Id {
|
impl Id {
|
||||||
|
pub fn new<W: WorldMut>(mut w: World<W>, server: Server) -> Self {
|
||||||
|
Self::from_parts(w.clock().get().as_millis(), w.rng().random(), server)
|
||||||
|
}
|
||||||
|
|
||||||
pub const fn from_parts(millis: u64, random: u128, server: Server) -> Self {
|
pub const fn from_parts(millis: u64, random: u128, server: Server) -> Self {
|
||||||
let id = entity::Id::from_parts(
|
let id = entity::Id::from_parts(
|
||||||
millis,
|
millis,
|
||||||
|
|
@ -119,7 +146,6 @@ impl Id {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const fn server(self) -> Server {
|
pub const fn server(self) -> Server {
|
||||||
// It's still possible that ID is invalid because of deserialization.
|
|
||||||
unsafe { mem::transmute::<u8, Server>(self.0.metadata().data() & 0b111) }
|
unsafe { mem::transmute::<u8, Server>(self.0.metadata().data() & 0b111) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue