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 }