All Downloads are FREE. Search and download functionalities are using the official Maven repository.

framework.Parser Maven / Gradle / Ivy

package framework;

import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Request parse
 */
@FunctionalInterface
public interface Parser {
    /**
     * @param text request text(not null, not empty)
     * @return map
     */
    Map> parseImpl(String text);

    /**
     * @param text request text
     * @return map
     */
    default Map> parse(String text) {
        if(text == null || text.length() <= 0) {
            return Tool.map();
        }
        return parseImpl(text);
    }

    /**
     * application/x-www-form-urlencoded
     */
    class Url implements Parser {

        @Override
        public Map> parseImpl(String text) {
            return Stream.of(text.split("&")).map(s -> s.split("=", 2)).collect(Collectors.groupingBy(pair -> pair[0], Collectors.mapping(Try.f(pair -> URLDecoder.decode(pair[1], StandardCharsets.UTF_8.name())), Collectors.toList())));
        }
    }

    /**
     * application/json
     */
    class Json implements Parser {

        @Override
        public Map> parseImpl(String text) {
            throw new UnsupportedOperationException();
        }
    }

    /**
     * text/csv
     */
    class Csv implements Parser {

        @Override
        public Map> parseImpl(String text) {
            throw new UnsupportedOperationException();
        }
    }

    /**
     * application/xml
     */
    class Xml implements Parser {

        @Override
        public Map> parseImpl(String text) {
            throw new UnsupportedOperationException();
        }
    }

    /**
     * application/yaml
     */
    class Yaml implements Parser {

        @Override
        public Map> parseImpl(String text) {
            throw new UnsupportedOperationException();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy