diff --git a/src/lib/core.rs b/src/lib/core.rs index 51e0c076b..f99ad071c 100644 --- a/src/lib/core.rs +++ b/src/lib/core.rs @@ -11,10 +11,10 @@ use futures::{future, Future, Stream}; use super::config::Configuration; // SearchResult -use super::event::{CreateEvent, SearchEvent, AuthEvent}; +use super::event::{DeleteEvent, ModifyEvent, CreateEvent, SearchEvent, AuthEvent}; use super::filter::Filter; use super::log; -use super::proto_v1::{CreateRequest, SearchRequest, AuthRequest, AuthResponse}; +use super::proto_v1::{DeleteRequest, ModifyRequest, CreateRequest, SearchRequest, AuthRequest, AuthResponse}; use super::server; struct AppState { @@ -91,6 +91,18 @@ fn create( json_event_decode!(req, state, CreateEvent, Response, CreateRequest) } +fn modify( + (req, state): (HttpRequest, State), +) -> impl Future { + json_event_decode!(req, state, ModifyEvent, Response, ModifyRequest) +} + +fn delete( + (req, state): (HttpRequest, State), +) -> impl Future { + json_event_decode!(req, state, DeleteEvent, Response, DeleteRequest) +} + fn search( (req, state): (HttpRequest, State), ) -> impl Future { @@ -241,6 +253,13 @@ pub fn create_server_core(config: Configuration) { .resource("/v1/create", |r| { r.method(http::Method::POST).with_async(create) }) + // Should these actually be different method types? + .resource("/v1/modify", |r| { + r.method(http::Method::POST).with_async(modify) + }) + .resource("/v1/delete", |r| { + r.method(http::Method::POST).with_async(delete) + }) // curl --header "Content-Type: application/json" --request POST --data '{ "filter" : { "Eq": ["class", "user"] }}' http://127.0.0.1:8080/v1/search .resource("/v1/search", |r| { r.method(http::Method::POST).with_async(search) diff --git a/src/lib/event.rs b/src/lib/event.rs index 09bc70225..ae9e35ea2 100644 --- a/src/lib/event.rs +++ b/src/lib/event.rs @@ -1,6 +1,6 @@ use super::filter::Filter; use super::proto_v1::Entry as ProtoEntry; -use super::proto_v1::{CreateRequest, Response, SearchRequest, SearchResponse, AuthRequest, AuthResponse, AuthStatus}; +use super::proto_v1::{CreateRequest, Response, SearchRequest, SearchResponse, AuthRequest, AuthResponse, AuthStatus, DeleteRequest, ModifyRequest}; use actix::prelude::*; use entry::{Entry, EntryCommitted, EntryInvalid, EntryNew, EntryValid}; use error::OperationError; @@ -157,6 +157,10 @@ impl Message for DeleteEvent { } impl DeleteEvent { + pub fn from_request(request: DeleteRequest) -> Self { + unimplemented!() + } + pub fn new_internal(filter: Filter) -> Self { DeleteEvent { filter: filter, @@ -177,6 +181,10 @@ impl Message for ModifyEvent { } impl ModifyEvent { + pub fn from_request(request: ModifyRequest) -> Self { + unimplemented!() + } + pub fn new_internal(filter: Filter, modlist: ModifyList) -> Self { ModifyEvent { filter: filter, diff --git a/src/lib/proto_v1.rs b/src/lib/proto_v1.rs index dc1d767ea..263226832 100644 --- a/src/lib/proto_v1.rs +++ b/src/lib/proto_v1.rs @@ -63,6 +63,22 @@ impl CreateRequest { } } +#[derive(Debug, Serialize, Deserialize)] +pub struct DeleteRequest { + pub filter: Filter, +} + +impl DeleteRequest { + pub fn new(filter: Filter) -> Self { + DeleteRequest { filter: filter } + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct ModifyRequest { + // Probably needs a modlist? +} + // Login is a multi-step process potentially. First the client says who they // want to request // diff --git a/src/lib/server.rs b/src/lib/server.rs index 3368ea2ef..fb8ee49df 100644 --- a/src/lib/server.rs +++ b/src/lib/server.rs @@ -696,6 +696,22 @@ impl Handler for QueryServer { } } +impl Handler for QueryServer { + type Result = Result; + + fn handle(&mut self, msg: ModifyEvent, _: &mut Self::Context) -> Self::Result { + unimplemented!() + } +} + +impl Handler for QueryServer { + type Result = Result; + + fn handle(&mut self, msg: DeleteEvent, _: &mut Self::Context) -> Self::Result { + unimplemented!() + } +} + impl Handler for QueryServer { type Result = Result;