Java Code Examples for com.fasterxml.jackson.core.format.MatchStrength#SOLID_MATCH

The following examples show how to use com.fasterxml.jackson.core.format.MatchStrength#SOLID_MATCH . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: MincodeFactory.java    From divolte-collector with Apache License 2.0 5 votes vote down vote up
@Override
public MatchStrength hasFormat(final InputAccessor acc) throws IOException {
    final MatchStrength matchStrength;
    if (acc.hasMoreBytes()) {
        final byte b = acc.nextByte();
        // First byte has to be one of the record types, possibly capital denoting a root object.
        // (Only '.' cannot appear at the start of Mincode.)
        switch (b) {
            case '(':
            case 'a':
            case 's':
            case 't':
            case 'f':
            case 'n':
            case 'd':
            case 'j':
                matchStrength = MatchStrength.SOLID_MATCH;
                break;
            default:
                matchStrength = MatchStrength.NO_MATCH;
        }
    } else {
        // Zero-length isn't supported.
        matchStrength = MatchStrength.NO_MATCH;
    }
    return matchStrength;
}
 
Example 2
Source File: ByteSourceJsonBootstrapper.java    From lams with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Current implementation is not as thorough as other functionality
 * ({@link com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper}); 
 * supports UTF-8, for example. But it should work, for now, and can
 * be improved as necessary.
 */
public static MatchStrength hasJSONFormat(InputAccessor acc) throws IOException
{
    // Ideally we should see "[" or "{"; but if not, we'll accept double-quote (String)
    // in future could also consider accepting non-standard matches?
    
    if (!acc.hasMoreBytes()) {
        return MatchStrength.INCONCLUSIVE;
    }
    byte b = acc.nextByte();
    // Very first thing, a UTF-8 BOM?
    if (b == UTF8_BOM_1) { // yes, looks like UTF-8 BOM
        if (!acc.hasMoreBytes()) {
            return MatchStrength.INCONCLUSIVE;
        }
        if (acc.nextByte() != UTF8_BOM_2) {
            return MatchStrength.NO_MATCH;
        }
        if (!acc.hasMoreBytes()) {
            return MatchStrength.INCONCLUSIVE;
        }
        if (acc.nextByte() != UTF8_BOM_3) {
            return MatchStrength.NO_MATCH;
        }
        if (!acc.hasMoreBytes()) {
            return MatchStrength.INCONCLUSIVE;
        }
        b = acc.nextByte();
    }
    // Then possible leading space
    int ch = skipSpace(acc, b);
    if (ch < 0) {
        return MatchStrength.INCONCLUSIVE;
    }
    // First, let's see if it looks like a structured type:
    if (ch == '{') { // JSON object?
        // Ideally we need to find either double-quote or closing bracket
        ch = skipSpace(acc);
        if (ch < 0) {
            return MatchStrength.INCONCLUSIVE;
        }
        if (ch == '"' || ch == '}') {
            return MatchStrength.SOLID_MATCH;
        }
        // ... should we allow non-standard? Let's not yet... can add if need be
        return MatchStrength.NO_MATCH;
    }
    MatchStrength strength;
    
    if (ch == '[') {
        ch = skipSpace(acc);
        if (ch < 0) {
            return MatchStrength.INCONCLUSIVE;
        }
        // closing brackets is easy; but for now, let's also accept opening...
        if (ch == ']' || ch == '[') {
            return MatchStrength.SOLID_MATCH;
        }
        return MatchStrength.SOLID_MATCH;
    } else {
        // plain old value is not very convincing...
        strength = MatchStrength.WEAK_MATCH;
    }

    if (ch == '"') { // string value
        return strength;
    }
    if (ch <= '9' && ch >= '0') { // number
        return strength;
    }
    if (ch == '-') { // negative number
        ch = skipSpace(acc);
        if (ch < 0) {
            return MatchStrength.INCONCLUSIVE;
        }
        return (ch <= '9' && ch >= '0') ? strength : MatchStrength.NO_MATCH;
    }
    // or one of literals
    if (ch == 'n') { // null
        return tryMatch(acc, "ull", strength);
    }
    if (ch == 't') { // true
        return tryMatch(acc, "rue", strength);
    }
    if (ch == 'f') { // false
        return tryMatch(acc, "alse", strength);
    }
    return MatchStrength.NO_MATCH;
}
 
Example 3
Source File: ByteSourceJsonBootstrapper.java    From openbd-core with GNU General Public License v3.0 4 votes vote down vote up
/**
 * Current implementation is not as thorough as other functionality
 * ({@link com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper}); 
 * supports UTF-8, for example. But it should work, for now, and can
 * be improved as necessary.
 */
public static MatchStrength hasJSONFormat(InputAccessor acc) throws IOException
{
    // Ideally we should see "[" or "{"; but if not, we'll accept double-quote (String)
    // in future could also consider accepting non-standard matches?
    
    if (!acc.hasMoreBytes()) {
        return MatchStrength.INCONCLUSIVE;
    }
    byte b = acc.nextByte();
    // Very first thing, a UTF-8 BOM?
    if (b == UTF8_BOM_1) { // yes, looks like UTF-8 BOM
        if (!acc.hasMoreBytes()) {
            return MatchStrength.INCONCLUSIVE;
        }
        if (acc.nextByte() != UTF8_BOM_2) {
            return MatchStrength.NO_MATCH;
        }
        if (!acc.hasMoreBytes()) {
            return MatchStrength.INCONCLUSIVE;
        }
        if (acc.nextByte() != UTF8_BOM_3) {
            return MatchStrength.NO_MATCH;
        }
        if (!acc.hasMoreBytes()) {
            return MatchStrength.INCONCLUSIVE;
        }
        b = acc.nextByte();
    }
    // Then possible leading space
    int ch = skipSpace(acc, b);
    if (ch < 0) {
        return MatchStrength.INCONCLUSIVE;
    }
    // First, let's see if it looks like a structured type:
    if (ch == '{') { // JSON object?
        // Ideally we need to find either double-quote or closing bracket
        ch = skipSpace(acc);
        if (ch < 0) {
            return MatchStrength.INCONCLUSIVE;
        }
        if (ch == '"' || ch == '}') {
            return MatchStrength.SOLID_MATCH;
        }
        // ... should we allow non-standard? Let's not yet... can add if need be
        return MatchStrength.NO_MATCH;
    }
    MatchStrength strength;
    
    if (ch == '[') {
        ch = skipSpace(acc);
        if (ch < 0) {
            return MatchStrength.INCONCLUSIVE;
        }
        // closing brackets is easy; but for now, let's also accept opening...
        if (ch == ']' || ch == '[') {
            return MatchStrength.SOLID_MATCH;
        }
        return MatchStrength.SOLID_MATCH;
    } else {
        // plain old value is not very convincing...
        strength = MatchStrength.WEAK_MATCH;
    }

    if (ch == '"') { // string value
        return strength;
    }
    if (ch <= '9' && ch >= '0') { // number
        return strength;
    }
    if (ch == '-') { // negative number
        ch = skipSpace(acc);
        if (ch < 0) {
            return MatchStrength.INCONCLUSIVE;
        }
        return (ch <= '9' && ch >= '0') ? strength : MatchStrength.NO_MATCH;
    }
    // or one of literals
    if (ch == 'n') { // null
        return tryMatch(acc, "ull", strength);
    }
    if (ch == 't') { // true
        return tryMatch(acc, "rue", strength);
    }
    if (ch == 'f') { // false
        return tryMatch(acc, "alse", strength);
    }
    return MatchStrength.NO_MATCH;
}