create skeleton for server from design
This commit is contained in:
@ -1,245 +0,0 @@
|
||||
// main author: Robin Willmann
|
||||
// date : see git.
|
||||
// WIP, changes welcome
|
||||
|
||||
extern crate image;
|
||||
|
||||
pub mod model {
|
||||
pub struct Sha256(pub [u8; 64]);
|
||||
|
||||
pub struct Texture {
|
||||
pub id: String,
|
||||
pub name: String,
|
||||
pub tags: Vec<String>,
|
||||
pub format: TextureFormat,
|
||||
pub resolution: (usize, usize),
|
||||
pub texture_hash: Sha256,
|
||||
}
|
||||
|
||||
pub enum TextureFormat {
|
||||
PNG,
|
||||
JPG,
|
||||
}
|
||||
}
|
||||
|
||||
pub mod protocol {
|
||||
|
||||
use crate::model::*;
|
||||
|
||||
use std::io;
|
||||
|
||||
pub enum ReplaceTextureStatus {
|
||||
// Call Again With Texture Binary
|
||||
NeedTextureData,
|
||||
// Done.
|
||||
Ok,
|
||||
}
|
||||
|
||||
pub type ProtocolResult<T> = Result<T, ProtocolError>;
|
||||
pub enum ProtocolError {
|
||||
BadRequest(String),
|
||||
FileNotFound(String),
|
||||
Conflict(String),
|
||||
InternalServerError(std::io::Error),
|
||||
NotImplemented,
|
||||
}
|
||||
|
||||
pub trait ProtocolHandler: Send + Sync {
|
||||
fn query(&mut self, query: &[String]) -> ProtocolResult<Vec<Texture>>;
|
||||
|
||||
fn get_texture_by_id(&mut self, id: String) -> ProtocolResult<Option<Texture>>;
|
||||
|
||||
fn get_texture_by_name(&mut self, id: String) -> ProtocolResult<Option<Texture>>;
|
||||
|
||||
fn get_texture_file(&mut self, hash: Sha256) -> ProtocolResult<Vec<u8>>;
|
||||
|
||||
fn get_texture_preview(&mut self, hash: Sha256) -> ProtocolResult<Vec<u8>>;
|
||||
|
||||
fn replace_texture(
|
||||
&mut self,
|
||||
delete: Option<Texture>,
|
||||
insert: Option<Texture>,
|
||||
insert_texture_data: Option<Vec<u8>>,
|
||||
) -> ProtocolResult<ReplaceTextureStatus>;
|
||||
}
|
||||
|
||||
pub struct ProtocolConfig {
|
||||
pub port: u16,
|
||||
}
|
||||
|
||||
pub fn listen_forever(handler: &ProtocolHandler) -> io::Result<()> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
pub mod persistency {
|
||||
|
||||
use crate::model::*;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::io;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::Arc;
|
||||
|
||||
pub type TextureFileResult = Result< Arc<Vec<u8>> , TextureFileError>
|
||||
pub enum TextureFileError {
|
||||
NotFound,
|
||||
IOError(io::Error),
|
||||
ImgError(::image::Error),
|
||||
}
|
||||
|
||||
pub struct DataStore {
|
||||
// private attributes
|
||||
// may change
|
||||
data_dir: PathBuf,
|
||||
texture: Vec<Texture>,
|
||||
preview_cache: HashMap<(TextureFormat, Sha256), Arc<Vec<u8>>>,
|
||||
}
|
||||
|
||||
impl DataStore {
|
||||
pub fn new(path: &Path) -> io::Result<DataStore> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
pub fn garbage_collect(&mut self) -> io::Result<()> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
pub fn query(&mut self, query: &self::search::Query) -> Vec<Texture> {
|
||||
unimplemented!();
|
||||
// calls self::search::search(... )
|
||||
}
|
||||
|
||||
/// returns true if successful
|
||||
pub fn delete(&mut self, tex: &Texture) -> bool {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
pub fn insert(&mut self, tex: Texture) -> bool {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
pub fn by_name<'a>(&'a self, name: &str) -> &'a Texture {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
pub fn by_id<'a, 'b>(&'a self, id: &'b str) -> &'a Texture {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
pub fn has_hash(&self, hash: &Sha256) -> bool {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
pub fn get_texture_file(&mut self, hash: &Sha256) -> TextureFileResult {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
pub fn get_texture_preview(&mut self, hash: &Sha256) -> TextureFileResult {
|
||||
unimplemented!();
|
||||
}
|
||||
}
|
||||
|
||||
pub use self::search::Query;
|
||||
|
||||
mod search {
|
||||
|
||||
use crate::model::*;
|
||||
|
||||
pub struct Query {
|
||||
filters: Vec<QueryFilterModifier>,
|
||||
}
|
||||
|
||||
pub type QueryParserResult = Result<Query, QuerySyntaxError>;
|
||||
pub enum QuerySyntaxError {
|
||||
UnknownFilter,
|
||||
}
|
||||
|
||||
impl Query {
|
||||
pub fn parse(input: &[String]) -> QueryParserResult {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn search(input: &[Texture], query: &Query) -> Vec<Texture> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
//private
|
||||
enum QueryFilterModifier {
|
||||
None(QueryFilter),
|
||||
Not(QueryFilter),
|
||||
}
|
||||
|
||||
//private
|
||||
enum QueryFilter {
|
||||
TagName(String),
|
||||
InName(String),
|
||||
MinResolution(usize),
|
||||
BeforeDate { year: u16, month: u16, day: u16 },
|
||||
}
|
||||
}
|
||||
|
||||
pub mod image_convert {
|
||||
use crate::model::*;
|
||||
|
||||
pub struct ConvertConfig {
|
||||
pub desired_size: (usize, usize),
|
||||
}
|
||||
|
||||
pub fn generate_preview(
|
||||
input: &[u8],
|
||||
format: TextureFormat,
|
||||
config: &ConvertConfig,
|
||||
) -> ::image::ImageResult<Vec<u8>> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub mod main {
|
||||
|
||||
use crate::model::*;
|
||||
use crate::protocol::*;
|
||||
|
||||
use std::sync::Arc;
|
||||
|
||||
struct ServerState {
|
||||
// private attributes
|
||||
}
|
||||
|
||||
impl ProtocolHandler for ServerState {
|
||||
fn query(&mut self, query: &[String]) -> ProtocolResult<Vec<Texture>> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn get_texture_by_id(&mut self, id: String) -> ProtocolResult<Option<Texture>> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn get_texture_by_name(&mut self, id: String) -> ProtocolResult<Option<Texture>> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn get_texture_file(&mut self, hash: Sha256) -> ProtocolResult<Arc<Vec<u8>>> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn get_texture_preview(&mut self, hash: Sha256) -> ProtocolResult<Arc<Vec<u8>>> {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn replace_texture(
|
||||
&mut self,
|
||||
delete: Option<Texture>,
|
||||
insert: Option<Texture>,
|
||||
insert_texture_data: Option<Vec<u8>>,
|
||||
) -> ProtocolResult<ReplaceTextureStatus> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user