blob: 090426a7974bd55ed1e5a64825752ecde78494da [file] [log] [blame]
Mark Slee31985722006-05-24 21:45:31 +00001#ifndef T_FIELD_H
2#define T_FIELD_H
3
4#include <string>
5
6/**
Mark Sleef5377b32006-10-10 01:42:59 +00007 * Class to represent a field in a thrift structure. A field has a data type,
8 * a symbolic name, and a numeric identifier.
Mark Slee31985722006-05-24 21:45:31 +00009 *
10 * @author Mark Slee <mcslee@facebook.com>
11 */
12class t_field {
13 public:
Mark Sleeb15a68b2006-06-07 06:46:24 +000014 t_field(t_type* type, std::string name) :
Mark Sleef5377b32006-10-10 01:42:59 +000015 type_(type),
16 name_(name),
Mark Slee36bfa2e2007-01-19 20:09:51 +000017 key_(0),
Mark Slee7ff32452007-02-01 05:26:18 +000018 value_(NULL),
Mark Slee36bfa2e2007-01-19 20:09:51 +000019 xsd_optional_(false) {}
Mark Sleeb15a68b2006-06-07 06:46:24 +000020
Mark Slee9cb7c612006-09-01 22:17:45 +000021 t_field(t_type* type, std::string name, int32_t key) :
Mark Sleef5377b32006-10-10 01:42:59 +000022 type_(type),
23 name_(name),
Mark Slee36bfa2e2007-01-19 20:09:51 +000024 key_(key),
Mark Slee7ff32452007-02-01 05:26:18 +000025 value_(NULL),
Mark Slee36bfa2e2007-01-19 20:09:51 +000026 xsd_optional_(false) {}
Mark Slee31985722006-05-24 21:45:31 +000027
28 ~t_field() {}
29
Mark Sleef5377b32006-10-10 01:42:59 +000030 t_type* get_type() const {
31 return type_;
32 }
33
34 const std::string& get_name() const {
35 return name_;
36 }
37
38 int32_t get_key() const {
39 return key_;
40 }
Mark Slee31985722006-05-24 21:45:31 +000041
Mark Slee21135c32007-02-05 21:52:08 +000042 void set_value(t_const_value* value) {
43 value_ = value;
44 }
45
46 t_const_value* get_value() {
47 return value_;
48 }
49
Mark Slee36bfa2e2007-01-19 20:09:51 +000050 void set_xsd_optional(bool xsd_optional) {
51 xsd_optional_ = xsd_optional;
52 }
53
54 bool get_xsd_optional() const {
55 return xsd_optional_;
56 }
57
Mark Slee21135c32007-02-05 21:52:08 +000058 void add_xsd_attr(std::string attr) {
59 xsd_attrs_.push_back(attr);
Mark Slee7ff32452007-02-01 05:26:18 +000060 }
61
Mark Slee21135c32007-02-05 21:52:08 +000062 const std::vector<std::string>& get_xsd_attrs() {
63 return xsd_attrs_;
Mark Slee7ff32452007-02-01 05:26:18 +000064 }
65
ccheeverf53b5cf2007-02-05 20:33:11 +000066 const std::string& get_doc() const {
67 return doc_;
68 }
69
70 bool has_doc() {
71 return has_doc_;
72 }
73
74 void set_doc(const std::string& doc) {
75 doc_ = doc;
76 has_doc_ = true;
77 }
78
Mark Slee31985722006-05-24 21:45:31 +000079 private:
80 t_type* type_;
81 std::string name_;
Mark Slee9cb7c612006-09-01 22:17:45 +000082 int32_t key_;
Mark Slee7ff32452007-02-01 05:26:18 +000083 t_const_value* value_;
ccheeverf53b5cf2007-02-05 20:33:11 +000084
Mark Slee36bfa2e2007-01-19 20:09:51 +000085 bool xsd_optional_;
Mark Slee21135c32007-02-05 21:52:08 +000086 std::vector<std::string> xsd_attrs_;
Mark Slee36bfa2e2007-01-19 20:09:51 +000087
ccheeverf53b5cf2007-02-05 20:33:11 +000088 std::string doc_;
89 bool has_doc_;
90
Mark Slee31985722006-05-24 21:45:31 +000091};
92
93#endif