diff options
Diffstat (limited to 'src/protocol.rs')
| -rw-r--r-- | src/protocol.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/protocol.rs b/src/protocol.rs index d45cdd8..cb90f5b 100644 --- a/src/protocol.rs +++ b/src/protocol.rs @@ -3,6 +3,8 @@ //! Simple line-oriented text protocol: //! PUT <ttl_secs> <content>\n //! PUTP <ttl_secs> <content>\n +//! PUTC <ttl_secs> <content>\n (store chunk) +//! PUTM <ttl_secs> <content>\n (store manifest) //! GET <key>\n //! DEL <key>\n //! PIN <key>\n @@ -21,6 +23,14 @@ pub enum Request { content_b58: String, encrypt: bool, }, + PutChunk { + ttl_secs: u64, + content_b58: String, + }, + PutManifest { + ttl_secs: u64, + content_b58: String, + }, Get { key: String, }, @@ -67,6 +77,30 @@ pub fn parse_request(line: &str) -> Result<Request, String> { encrypt: cmd == "PUT", }) } + "PUTC" => { + let ttl_str = + parts.next().ok_or("PUTC requires: PUTC <ttl> <data>")?; + let content_b58 = + parts.next().ok_or("PUTC requires: PUTC <ttl> <data>")?; + let ttl_secs: u64 = + ttl_str.parse().map_err(|_| "invalid TTL number")?; + Ok(Request::PutChunk { + ttl_secs, + content_b58: content_b58.to_string(), + }) + } + "PUTM" => { + let ttl_str = + parts.next().ok_or("PUTM requires: PUTM <ttl> <data>")?; + let content_b58 = + parts.next().ok_or("PUTM requires: PUTM <ttl> <data>")?; + let ttl_secs: u64 = + ttl_str.parse().map_err(|_| "invalid TTL number")?; + Ok(Request::PutManifest { + ttl_secs, + content_b58: content_b58.to_string(), + }) + } "GET" => { let key = parts.next().ok_or("GET requires: GET <key>")?; Ok(Request::Get { |