FastLED 3.10.6
Loading...
Searching...
No Matches

◆ on_token()

ParseState fl::anonymous_namespace{json.cpp.hpp}::JsonValidator::on_token ( JsonToken token,
const fl::span< const char > & value )
inlineoverridevirtual

Implements fl::anonymous_namespace{json.cpp.hpp}::JsonVisitor.

Definition at line 532 of file json.cpp.hpp.

532 {
533 (void)value; // Suppress unused parameter warning
534
535 // Recursion depth check
536 if (mDepth > MAX_JSON_DEPTH) {
537 FL_ERROR("JSON parser: FATAL - recursion depth exceeded %s", MAX_JSON_DEPTH);
538 return ParseState::ERROR;
539 }
540
541 switch (token) {
543 mBracketStack.push_back('{');
544 mDepth++;
545 mExpectKey = true;
546 mExpectValue = false;
548
550 if (mBracketStack.empty() || mBracketStack.back() != '{') {
551 return ParseState::ERROR; // Unmatched closing brace
552 }
553 mBracketStack.pop_back();
554 mDepth--;
555 mExpectKey = false;
557
559 mBracketStack.push_back('[');
560 mDepth++;
561 mExpectValue = true;
563
565 if (mBracketStack.empty() || mBracketStack.back() != '[') {
566 return ParseState::ERROR; // Unmatched closing bracket
567 }
568 mBracketStack.pop_back();
569 mDepth--;
570 mExpectValue = false;
572
573 case JsonToken::COLON:
574 if (!mExpectColon) {
575 return ParseState::ERROR; // Unexpected colon
576 }
577 mExpectColon = false;
578 mExpectValue = true;
580
582 if (!mBracketStack.empty() && mBracketStack.back() == '{' && mExpectKey) {
583 // This is an object key
584 mExpectKey = false;
585 mExpectColon = true;
586 } else if (mExpectValue || mBracketStack.empty()) {
587 // This is a value
588 mExpectValue = false;
589 } else {
590 return ParseState::ERROR;
591 }
593
595 case JsonToken::TRUE:
596 case JsonToken::FALSE:
598 // Specialized array tokens (complete arrays, treat as values)
602 if (mExpectValue || mBracketStack.empty()) {
603 mExpectValue = false;
605 }
606 return ParseState::ERROR;
607
608 case JsonToken::COMMA:
609 // Set expectations for next element
610 if (!mBracketStack.empty()) {
611 if (mBracketStack.back() == '{') {
612 mExpectKey = true;
613 } else {
614 mExpectValue = true;
615 }
616 }
618
621
622 default:
623 return ParseState::ERROR;
624 }
625 }
#define FL_ERROR(...)
Definition log.h:372
constexpr int type_rank< T >::value

References fl::anonymous_namespace{json.cpp.hpp}::ARRAY_FLOAT, fl::anonymous_namespace{json.cpp.hpp}::ARRAY_INT16, fl::anonymous_namespace{json.cpp.hpp}::ARRAY_UINT8, fl::anonymous_namespace{json.cpp.hpp}::COLON, fl::anonymous_namespace{json.cpp.hpp}::COMMA, fl::anonymous_namespace{json.cpp.hpp}::END_OF_INPUT, fl::anonymous_namespace{json.cpp.hpp}::ERROR, fl::anonymous_namespace{json.cpp.hpp}::FALSE, FL_ERROR, fl::anonymous_namespace{json.cpp.hpp}::KEEP_GOING, fl::anonymous_namespace{json.cpp.hpp}::LBRACE, fl::anonymous_namespace{json.cpp.hpp}::LBRACKET, fl::anonymous_namespace{json.cpp.hpp}::MAX_JSON_DEPTH, mBracketStack, mDepth, mExpectColon, mExpectKey, mExpectValue, fl::anonymous_namespace{json.cpp.hpp}::NULL_VALUE, fl::anonymous_namespace{json.cpp.hpp}::NUMBER, fl::anonymous_namespace{json.cpp.hpp}::RBRACE, fl::anonymous_namespace{json.cpp.hpp}::RBRACKET, fl::anonymous_namespace{json.cpp.hpp}::STRING, fl::anonymous_namespace{json.cpp.hpp}::TRUE, and fl::type_rank< T >::value.