3#include <xrpl/basics/safe_cast.h>
4#include <xrpl/json/json_value.h>
5#include <xrpl/protocol/Units.h>
38#pragma push_macro("XMACRO")
41#define XMACRO(STYPE) \
43 STYPE(STI_UNKNOWN, -2) \
44 STYPE(STI_NOTPRESENT, 0) \
45 STYPE(STI_UINT16, 1) \
48 STYPE(STI_UINT32, 2) \
49 STYPE(STI_UINT64, 3) \
50 STYPE(STI_UINT128, 4) \
51 STYPE(STI_UINT256, 5) \
52 STYPE(STI_AMOUNT, 6) \
54 STYPE(STI_ACCOUNT, 8) \
55 STYPE(STI_NUMBER, 9) \
56 STYPE(STI_INT32, 10) \
57 STYPE(STI_INT64, 11) \
60 STYPE(STI_OBJECT, 14) \
61 STYPE(STI_ARRAY, 15) \
64 STYPE(STI_UINT8, 16) \
65 STYPE(STI_UINT160, 17) \
66 STYPE(STI_PATHSET, 18) \
67 STYPE(STI_VECTOR256, 19) \
68 STYPE(STI_UINT96, 20) \
69 STYPE(STI_UINT192, 21) \
70 STYPE(STI_UINT384, 22) \
71 STYPE(STI_UINT512, 23) \
72 STYPE(STI_ISSUE, 24) \
73 STYPE(STI_XCHAIN_BRIDGE, 25) \
74 STYPE(STI_CURRENCY, 26) \
78 STYPE(STI_TRANSACTION, 10001) \
79 STYPE(STI_LEDGERENTRY, 10002) \
80 STYPE(STI_VALIDATION, 10003) \
81 STYPE(STI_METADATA, 10004)
83#pragma push_macro("TO_ENUM")
85#pragma push_macro("TO_MAP")
88#define TO_ENUM(name, value) name = (value),
89#define TO_MAP(name, value) {#name, value},
100#pragma pop_macro("XMACRO")
101#pragma pop_macro("TO_ENUM")
102#pragma pop_macro("TO_MAP")
116 return (
id << 16) | index;
307 template <
class... Args>
323inline OptionaledField<T>
360#pragma push_macro("UNTYPED_SFIELD")
362#pragma push_macro("TYPED_SFIELD")
365#define UNTYPED_SFIELD(sfName, stiSuffix, fieldValue, ...) extern SField const sfName;
366#define TYPED_SFIELD(sfName, stiSuffix, fieldValue, ...) extern SF_##stiSuffix const sfName;
371#include <xrpl/protocol/detail/sfields.macro>
374#pragma pop_macro("TYPED_SFIELD")
376#pragma pop_macro("UNTYPED_SFIELD")
Lightweight wrapper to tag static string.
static constexpr auto kSmdChangeOrig
static constexpr auto kSmdNeedsAsset
static SField const & getField(int fieldCode)
static IsSigning const kNotSigning
static constexpr auto kSmdDeleteFinal
static constexpr auto kSmdCreate
SField & operator=(SField const &)=delete
bool shouldInclude(bool withSigningField) const
std::string const fieldName
static constexpr auto kSmdAlways
static SField const & getField(SerializedTypeID type, int value)
static std::unordered_map< std::string, SField const * > knownNameToField
bool isDiscardable() const
static constexpr auto kSmdNever
json::StaticString const jsonName
static std::unordered_map< int, SField const * > const & getKnownCodeToField()
static constexpr auto kSmdDefault
bool operator!=(SField const &f) const
SerializedTypeID const fieldType
static constexpr auto kSmdChangeNew
static std::unordered_map< int, SField const * > knownCodeToField
bool shouldMeta(int c) const
json::StaticString const & getJsonName() const
static int compare(SField const &f1, SField const &f2)
static constexpr auto kSmdPseudoAccount
std::string const & getName() const
static int getNumFields()
SField(SField const &)=delete
SField & operator=(SField &&)=delete
bool operator==(SField const &f) const
static constexpr auto kSmdBaseTen
static SField const & getField(int type, int value)
IsSigning const signingField
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
constexpr ApplyFlags operator~(ApplyFlags const &flags)
TypedField< STInteger< std::uint64_t > > SF_UINT64
TypedField< STIssue > SF_ISSUE
static std::map< std::string, int > const kSTypeMap
constexpr std::enable_if_t< std::is_integral_v< Dest > &&std::is_integral_v< Src >, Dest > safeCast(Src s) noexcept
TypedField< STInteger< std::uint8_t > > SF_UINT8
TypedField< STInteger< std::uint32_t > > SF_UINT32
int fieldCode(SerializedTypeID id, int index)
TypedField< STAmount > SF_AMOUNT
TypedField< STBitString< 128 > > SF_UINT128
TypedField< STInteger< std::int32_t > > SF_INT32
TypedField< STBitString< 384 > > SF_UINT384
TypedField< STBitString< 96 > > SF_UINT96
TypedField< STBlob > SF_VL
TypedField< STBitString< 512 > > SF_UINT512
TypedField< STInteger< std::int64_t > > SF_INT64
TypedField< STNumber > SF_NUMBER
TypedField< STXChainBridge > SF_XCHAIN_BRIDGE
TypedField< STInteger< std::uint16_t > > SF_UINT16
TypedField< STAccount > SF_ACCOUNT
TypedField< STCurrency > SF_CURRENCY
TypedField< STVector256 > SF_VECTOR256
TypedField< STBitString< 256 > > SF_UINT256
TypedField< STBitString< 160 > > SF_UINT160
TypedField< STBitString< 192 > > SF_UINT192
Indicate std::optional field semantics.
TypedField< T > const * f
OptionaledField(TypedField< T > const &f)
A field with a type known at compile time.
TypedField(PrivateAccessTagT pat, Args &&... args)