+ /**
+ * @brief Called by ParseJson if we are in STATE_START.
+ *
+ * @param[in] name The current name
+ * @param[in] currentChar The current character being parsed
+ * @return true if successfully parsed
+ */
+ bool HandleStartState(const char* name, const char currentChar);
+
+ /**
+ * @brief Called by ParseJson if we are in STATE_OBJECT.
+ *
+ * @param[in] currentChar The current character being parsed
+ * @param[in] lastCharacter The last character we parsed
+ * @return true if successfully parsed
+ */
+ bool HandleObjectState(const char currentChar, const char lastCharacter);
+
+ /**
+ * @brief Called by ParseJson if we are in STATE_KEY.
+ *
+ * @param[in/out] name A reference to the name variable
+ * @return true if successfully parsed
+ */
+ bool HandleKeyState(char*& name);
+
+ /**
+ * @brief Called by ParseJson if we are in STATE_VALUE.
+ *
+ * @param[in/out] name A reference to the name variable
+ * @param[in] currentChar The current character being parsed
+ * @param[in] lastCharacter The last character we parsed
+ * @return true if successfully parsed
+ */
+ bool HandleValueState(char*& name, const char currentChar, const char lastCharacter);
+
+ /**
+ * @brief Called by HandleValueState to parse a '"' character.
+ *
+ * @param[in] name The current name
+ * @return true if successfully parsed
+ */
+ bool HandleCharacterQuote(char*& name);
+
+ /**
+ * @brief Called by HandleValueState to parse a number or hyphen character.
+ *
+ * @param[in] name The current name
+ * @return true if successfully parsed
+ */
+ bool HandleCharacterNumberOrHyphen(const char* name);
+
+ /**
+ * @brief Called by HandleValueState to parse a '{' character.
+ *
+ * @param[in] name The current name
+ * @param[in] lastCharacter The last character we parsed
+ * @return true if successfully parsed
+ */
+ bool HandleCharacterBracesStart(const char* name, const char lastCharacter);
+
+ /**
+ * @brief Called by HandleValueState to parse a '}' character.
+ *
+ * @param[in] lastCharacter The last character we parsed
+ * @return true if successfully parsed
+ */
+ bool HandleCharacterBracesEnd(const char lastCharacter);
+
+ /**
+ * @brief Called by HandleValueState to parse a '[' character.
+ *
+ * @param[in] name The current name
+ * @return true if successfully parsed
+ */
+ bool HandleCharacterSquareBracketStart(const char* name);
+
+ /**
+ * @brief Called by HandleValueState to parse a ']' character.
+ *
+ * @param[in] lastCharacter The last character we parsed
+ * @return true if successfully parsed
+ */
+ bool HandleCharacterSquareBracketEnd(const char lastCharacter);
+
+ /**
+ * @brief Called by HandleValueState to parse a 't' character.
+ *
+ * @param[in] name The current name
+ * @return true if successfully parsed
+ */
+ bool HandleCharacterLowercaseT(const char* name);
+
+ /**
+ * @brief Called by HandleValueState to parse a 'n' character.
+ *
+ * @param[in] name The current name
+ * @return true if successfully parsed
+ */
+ bool HandleCharacterLowercaseN(const char* name);
+
+ /**
+ * @brief Called by HandleValueState to parse a 'f' character.
+ *
+ * @param[in] name The current name
+ * @return true if successfully parsed
+ */
+ bool HandleCharacterLowercaseF(const char* name);
+
+ /**
+ * @brief Called by HandleValueState to parse a ',' character.
+ *
+ * @param[in] name The current name
+ * @return true if successfully parsed
+ */
+ bool HandleCharacterComma(const char* name);