vim server_architektur.rs // add many things

This commit is contained in:
CodeSteak 2019-04-19 18:44:44 +02:00
parent c72fa53be4
commit f81c700a48
1 changed files with 142 additions and 99 deletions

View File

@ -1,170 +1,213 @@
// main author: Robin Willmann
// date : see git.
// WIP, changes welcome
mod model {
pub struct Sha256(pub [64;u8]);
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 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
JPG,
}
}
mod protocol {
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, NetworkError>;
pub type ProtocolResult<T> = Result<T, ProtocolError>;
pub enum ProtocolError {
BadRequest(pub String),
FileNotFound(pub String),
Conflict(pub String),
InternalServerError(pub std::io::Error),
BadRequest(String),
FileNotFound(String),
Conflict(String),
InternalServerError(std::io::Error),
NotImplemented,
}
pub trait ProtocolHandler : Send + Sync {
fn query(mut self, &[String]) ->
ProtocolError<Vec<Texture>>;
fn get_texture_by_id(mut self, id : String) ->
ProtocolError<Option<Texture>>;
fn get_texture_by_name(mut self, id : String) ->
ProtocolError<Option<Texture>>;
fn get_texture_file(mut self, hash : Sha256) ->
ProtocolError<Vec<u8>>;
fn get_texture_preview(mut self, hash : Sha256) ->
ProtocolError<Vec<u8>>;
fn replace_texture(mut self,
delete : Option<Texture>,
insert : Option<Texture>,
insert_texture_data : Option<Vec<u8>>
) -> ProtocolError<ReplaceTextureStatus>;
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 port: u16,
}
pub fn listen_forever(handler : &ProtocolHandler) -> {
unimplemend!()
pub fn listen_forever(handler: &ProtocolHandler) -> io::Result<()> {
unimplemented!()
}
}
mod persistency {
pub mod persistency {
use crate::model::*;
use std::collections::HashMap;
use std::io;
use std::path::{Path, PathBuf};
use std::sync::Arc;
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> {
unimplemend!()
pub fn new(path: &Path) -> io::Result<DataStore> {
unimplemented!()
}
pub fn garbage_collect() -> io::Result<()> {
unimplemend!()
pub fn garbage_collect(&mut self) -> io::Result<()> {
unimplemented!()
}
// TODO: think
}
mod search {
use crate::model::*;
pub struct Query {
filters : Vec<QueryFilterModifier>,
pub fn search(&mut self, query: &self::search::Query) -> Vec<Texture> {
unimplemented!();
// calls self::search::search(... )
}
pub type QueryParserResult<T> = Result<Query, QuerySyntaxError>;
}
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{
unimplemend!()
pub fn parse(input: &[String]) -> QueryParserResult {
unimplemented!()
}
}
pub fn search(input : &[Texture], query : &Query) -> Vec<Texture> {
pub fn search(input: &[Texture], query: &Query) -> Vec<Texture> {
unimplemented!()
}
//private
enum QueryFilterModifier{
enum QueryFilterModifier {
None(QueryFilter),
Not(QueryFilter),
}
//private
enum QueryFilter {
TagName(String),
InName(String),
MinResolution(usize),
BeforeDate {
year : u16,
month : u16,
day : u16,
}
BeforeDate { year: u16, month: u16, day: u16 },
}
}
}
mod image_convert {
pub mod image_convert {
use crate::model::*;
pub struct ConvertConfig {
pub desired_size : (usize, usize),
pub desired_size: (usize, usize),
}
pub generate_preview(
input : Vec<u8>,
format : Format
config : ConvertConfig,
) -> ::image::ImageResult<Vec<u8>>;
pub fn generate_preview(
input: &[u8],
format: TextureFormat,
config: &ConvertConfig,
) -> ::image::ImageResult<Vec<u8>> {
unimplemented!()
}
}
pub mod main {
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(){
unimplemend!()
pub fn main() {
unimplemented!()
}
}