| // Copyright (c) 2006- Facebook |
| // Distributed under the Thrift Software License |
| // |
| // See accompanying file LICENSE or visit the Thrift site at: |
| // http://developers.facebook.com/thrift/ |
| |
| #ifndef T_FIELD_H |
| #define T_FIELD_H |
| |
| #include <string> |
| #include <boost/lexical_cast.hpp> |
| |
| #include "t_doc.h" |
| |
| // Forward declare for xsd_attrs |
| class t_struct; |
| |
| /** |
| * Class to represent a field in a thrift structure. A field has a data type, |
| * a symbolic name, and a numeric identifier. |
| * |
| * @author Mark Slee <mcslee@facebook.com> |
| */ |
| class t_field : public t_doc { |
| public: |
| t_field(t_type* type, std::string name) : |
| type_(type), |
| name_(name), |
| key_(0), |
| value_(NULL), |
| xsd_optional_(false), |
| xsd_nillable_(false), |
| xsd_attrs_(NULL) {} |
| |
| t_field(t_type* type, std::string name, int32_t key) : |
| type_(type), |
| name_(name), |
| key_(key), |
| req_(T_OPT_IN_REQ_OUT), |
| value_(NULL), |
| xsd_optional_(false), |
| xsd_nillable_(false), |
| xsd_attrs_(NULL) {} |
| |
| ~t_field() {} |
| |
| t_type* get_type() const { |
| return type_; |
| } |
| |
| const std::string& get_name() const { |
| return name_; |
| } |
| |
| int32_t get_key() const { |
| return key_; |
| } |
| |
| enum e_req { |
| T_REQUIRED, |
| T_OPTIONAL, |
| T_OPT_IN_REQ_OUT, |
| }; |
| |
| void set_req(e_req req) { |
| req_ = req; |
| } |
| |
| e_req get_req() const { |
| return req_; |
| } |
| |
| void set_value(t_const_value* value) { |
| value_ = value; |
| } |
| |
| t_const_value* get_value() { |
| return value_; |
| } |
| |
| void set_xsd_optional(bool xsd_optional) { |
| xsd_optional_ = xsd_optional; |
| } |
| |
| bool get_xsd_optional() const { |
| return xsd_optional_; |
| } |
| |
| void set_xsd_nillable(bool xsd_nillable) { |
| xsd_nillable_ = xsd_nillable; |
| } |
| |
| bool get_xsd_nillable() const { |
| return xsd_nillable_; |
| } |
| |
| void set_xsd_attrs(t_struct* xsd_attrs) { |
| xsd_attrs_ = xsd_attrs; |
| } |
| |
| t_struct* get_xsd_attrs() { |
| return xsd_attrs_; |
| } |
| |
| // This is not the same function as t_type::get_fingerprint_material, |
| // but it does the same thing. |
| std::string get_fingerprint_material() const { |
| return boost::lexical_cast<std::string>(key_) + ":" + |
| ((req_ == T_OPTIONAL) ? "opt-" : "") + |
| type_->get_fingerprint_material(); |
| } |
| |
| private: |
| t_type* type_; |
| std::string name_; |
| int32_t key_; |
| e_req req_; |
| t_const_value* value_; |
| |
| bool xsd_optional_; |
| bool xsd_nillable_; |
| t_struct* xsd_attrs_; |
| |
| }; |
| |
| #endif |