1 module drocks.backup;
2 
3 import std.conv      : to;
4 import std.range     : array, slide;
5 import std.algorithm : map;
6 
7 import drocks.response : Response;
8 
9 
10 struct BackupUnit
11 {
12     size_t id;        //: 7
13     size_t timestamp; //: 1548151594
14     string time;      //: 22.01.2019 15:06:34 +0500
15     size_t size;      //: 10482
16 
17     this(const string[] args)
18     {
19         assert(4 == args.length);
20         //["id: 1", "timestamp: 1547966392", "time: 20.01.2019 11:39:52 +0500", "size: 7222"]
21         id        = args[0]["id: "       .length..$].to!size_t;
22         timestamp = args[1]["timestamp: ".length..$].to!size_t;
23         time      = args[2]["time: "     .length..$];
24         size      = args[3]["size: "     .length..$].to!size_t;
25     }
26 }
27 
28 struct BackupUnitsRange
29 {
30     alias Range = typeof(makeRange(Response.init));
31     Range _range;
32     size_t _size;
33 
34     private static
35     auto makeRange(Response resp)
36     {
37         return resp
38             .getMultiKey
39             .array
40             .slide(5, 5)
41             .map!"a[0..4]"
42             //.map!(x => x.map!( el => el.split(": ")[1] ) )
43             .map!(args => args.BackupUnit);
44     }
45 
46     this(Response resp)
47     {
48         _size  = resp.getKey.to!size_t;
49         _range = makeRange(resp);
50     }
51 
52     @property
53     size_t length() const
54     {
55         return _size;
56     }
57     @property
58     bool empty()
59     {
60         return _range.empty;
61     }
62     @property
63     auto front()
64     {
65         return _range.front;
66     }
67     void popFront()
68     {
69         _range.popFront;
70     }
71 }