1 /*
2  * hunt-proton: AMQP Protocol library for D programming language.
3  *
4  * Copyright (C) 2018-2019 HuntLabs
5  *
6  * Website: https://www.huntlabs.net/
7  *
8  * Licensed under the Apache-2.0 License.
9  *
10  */
11 
12 module hunt.proton.codec.impl.Decimal32Element;
13 
14 
15 import hunt.io.ByteBuffer;
16 import std.conv;
17 import hunt.proton.codec.impl.AtomicElement;
18 import hunt.proton.codec.impl.Element;
19 import hunt.proton.codec.impl.ArrayElement;
20 import hunt.proton.codec.impl.AbstractElement;
21 
22 import hunt.proton.amqp.Decimal32;
23 import hunt.proton.codec.Data;
24 
25 class Decimal32Element : AtomicElement!Decimal32
26 {
27 
28     private Decimal32 _value;
29 
30     this(Element!Decimal32 parent, Element!Decimal32 prev, Decimal32 d)
31     {
32         super(parent, prev);
33         _value = d;
34     }
35 
36     public int size()
37     {
38         return isElementOfArray() ? 4 : 5;
39     }
40 
41     public Decimal32 getValue()
42     {
43         return _value;
44     }
45 
46     public Data.DataType getDataType()
47     {
48         return Data.DataType.DECIMAL32;
49     }
50 
51     public int encode(ByteBuffer b)
52     {
53         int size = size();
54         if(b.remaining()>=size)
55         {
56             if(size == 5)
57             {
58                 b.put(cast(byte)0x74);
59             }
60             b.putInt(_value.getBits());
61             return size;
62         }
63         else
64         {
65             return 0;
66         }
67     }
68 }