private static bool TryReadIPv4MappedIPv6(Tokenizer tokenizer, out IpAddressV6 result)
    {
        ulong       high         = 0;
        ulong       low          = 0;
        byte        segmentsRead = 0;
        ParsedToken token;

        // Read reverse, we're only interested in the IPv4 on the end
        byte toRead = 4;

        for (byte i = 0; i < toRead; i++)
        {
            token = tokenizer.ParseAndAdvanceReverse(false);
            if (token.Type == TokenType.None)
            {
                break;
            }

            if (i > 0)
            {
                // The read token MUST be a dot
                if (token.Type != TokenType.Dot)
                {
                    result = default;
                    return(false);
                }

                // Advance once more
                token = tokenizer.ParseAndAdvanceReverse(false);
            }

            // Read a number
            if (token.Type == TokenType.Number)
            {
                BitUtilities.SetByte(ref low, ref high, (byte)(15 - i), token.Value);
                segmentsRead++;
            }
            else
            {
                result = default;
                return(false);
            }
        }

        // Assert that the next tokens are [Double-/Colon, ffff, Colon]
        token = tokenizer.ParseAndAdvanceReverse(false);

        if (token.Type != TokenType.Colon)
        {
            result = default;
            return(false);
        }

        token = tokenizer.ParseAndAdvanceReverse(true);

        if (token.Type != TokenType.Number || token.Value != 0xffff)
        {
            result = default;
            return(false);
        }

        token = tokenizer.ParseAndAdvanceReverse(false);

        if (token.Type is not TokenType.Colon && token.Type is not TokenType.DoubleColon)
        {
            result = default;
            return(false);
        }

        // Place 0xFFFF in the correct position
        BitUtilities.SetTuplet(ref low, ref high, 5, 0xFFFF);

        result = new IpAddressV6(high, low);
        return(true);
    }