public void parseInto()

in apm-agent-core/src/main/java/co/elastic/apm/agent/impl/baggage/otel/Parser.java [66:141]


    public void parseInto(BaggageImpl.Builder baggageBuilder) {
        for (int i = 0, n = baggageHeader.length(); i < n; i++) {
            char current = baggageHeader.charAt(i);

            if (skipToNext) {
                if (current == ',') {
                    reset(i + 1);
                }
                continue;
            }

            switch (current) {
                case '=': {
                    if (state == State.KEY) {
                        if (key.tryTerminating(i, baggageHeader)) {
                            setState(State.VALUE, i + 1);
                        } else {
                            skipToNext = true;
                        }
                    } else if (state == State.VALUE) {
                        skipToNext = !value.tryNextChar(current, i);
                    }
                    break;
                }
                case ';': {
                    if (state == State.VALUE) {
                        skipToNext = !value.tryTerminating(i, baggageHeader);
                        setState(State.META, i + 1);
                    }
                    break;
                }
                case ',': {
                    switch (state) {
                        case VALUE:
                            value.tryTerminating(i, baggageHeader);
                            break;
                        case META:
                            meta = baggageHeader.substring(metaStart, i).trim();
                            break;
                        case KEY: // none
                    }
                    putBaggage(baggageBuilder, key.getValue(), value.getValue(), meta);
                    reset(i + 1);
                    break;
                }
                default: {
                    switch (state) {
                        case KEY:
                            skipToNext = !key.tryNextChar(current, i);
                            break;
                        case VALUE:
                            skipToNext = !value.tryNextChar(current, i);
                            break;
                        case META: // none
                    }
                }
            }
        }
        // need to finish parsing if there was no list element termination comma
        switch (state) {
            case KEY:
                break;
            case META: {
                String rest = baggageHeader.substring(metaStart).trim();
                putBaggage(baggageBuilder, key.getValue(), value.getValue(), rest);
                break;
            }
            case VALUE: {
                if (!skipToNext) {
                    value.tryTerminating(baggageHeader.length(), baggageHeader);
                    putBaggage(baggageBuilder, key.getValue(), value.getValue(), null);
                    break;
                }
            }
        }
    }