1 /*
2  * Archttp - A highly performant web framework written in D.
3  *
4  * Copyright (C) 2021-2022 Kerisy.com
5  *
6  * Website: https://www.kerisy.com
7  *
8  * Licensed under the Apache-2.0 License.
9  *
10  */
11 
12 module archttp.codec.HttpDecoder;
13 
14 import geario.codec.Decoder;
15 import geario.codec.Encoder;
16 
17 import nbuff;
18 
19 import geario.event;
20 
21 import archttp.HttpRequestParser;
22 import archttp.HttpRequest;
23 import archttp.HttpContext;
24 
25 import geario.logging;
26 
27 class HttpDecoder : Decoder!HttpRequest
28 {
29     private HttpRequestParser _parser;
30 
31     this()
32     {
33         _parser = new HttpRequestParser;
34     }
35     
36     override long Decode(ref Nbuff buffer, ref HttpRequest request)
37     {
38         long result = _parser.parse(cast(string) buffer.data().data());
39         
40         if ( ParserStatus.COMPLETED == _parser.parserStatus() )
41         {
42             request = _parser.request();
43 
44             _parser.reset();
45             buffer.pop(result);
46             
47             return result;
48         }
49 
50         if ( ParserStatus.PARTIAL == _parser.parserStatus() )
51         {
52             return 0;
53         }
54         
55         return -1;
56     }
57 }