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

com.arangodb.shaded.vertx.ext.web.codec.BodyCodec Maven / Gradle / Ivy

There is a newer version: 7.8.0
Show newest version
/*
 * Copyright (c) 2011-2013 The original author or authors
 * ------------------------------------------------------
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Apache License v2.0 which accompanies this distribution.
 *
 *     The Eclipse Public License is available at
 *     http://www.eclipse.org/legal/epl-v10.html
 *
 *     The Apache License v2.0 is available at
 *     http://www.opensource.org/licenses/apache2.0.php
 *
 * You may elect to redistribute this code under either of these licenses.
 */
package com.arangodb.shaded.vertx.ext.web.codec;

import com.arangodb.shaded.vertx.codegen.annotations.GenIgnore;
import com.arangodb.shaded.vertx.codegen.annotations.VertxGen;
import com.arangodb.shaded.vertx.core.AsyncResult;
import com.arangodb.shaded.vertx.core.Handler;
import com.arangodb.shaded.vertx.core.buffer.Buffer;
import com.arangodb.shaded.vertx.core.json.JsonArray;
import com.arangodb.shaded.vertx.core.json.JsonObject;
import com.arangodb.shaded.vertx.core.parsetools.JsonParser;
import com.arangodb.shaded.vertx.core.streams.WriteStream;
import com.arangodb.shaded.vertx.ext.web.codec.impl.BodyCodecImpl;
import com.arangodb.shaded.vertx.ext.web.codec.impl.JsonStreamBodyCodec;
import com.arangodb.shaded.vertx.ext.web.codec.impl.StreamingBodyCodec;
import com.arangodb.shaded.vertx.ext.web.codec.spi.BodyStream;

import java.util.function.Function;

/**
 * A codec for encoding and decoding HTTP bodies.
 *
 * @author Julien Viet
 */
@VertxGen
public interface BodyCodec {

  /**
   * @return the UTF-8 string codec
   */
  static BodyCodec string() {
    return BodyCodecImpl.STRING;
  }

  /**
   * A codec for strings using a specific {@code encoding}.
   *
   * @param encoding the encoding
   * @return the codec
   */
  static BodyCodec string(String encoding) {
    return BodyCodecImpl.string(encoding);
  }

  /**
   * @return the {@link Buffer} codec
   */
  static BodyCodec buffer() {
    return BodyCodecImpl.BUFFER;
  }

  /**
   * @return the {@link JsonObject} codec
   */
  static BodyCodec jsonObject() {
    return BodyCodecImpl.JSON_OBJECT;
  }

  /**
   * @return the {@link JsonArray} codec
   */
  static BodyCodec jsonArray() {
    return BodyCodecImpl.JSON_ARRAY;
  }

  /**
   * Create and return a codec for Java objects encoded using Jackson mapper.
   *
   * @return a codec for mapping POJO to Json
   */
  static  BodyCodec json(Class type) {
    return BodyCodecImpl.json(type);
  }

  /**
   * @return a codec that simply discards the response
   */
  static BodyCodec none() {
    return BodyCodecImpl.NONE;
  }

  /**
   * Create a codec that buffers the entire body and then apply the {@code decode} function and returns the result.
   *
   * @param decode the decode function
   * @return the created codec
   */
  static  BodyCodec create(Function decode) {
    return new BodyCodecImpl<>(decode);
  }

  /**
   * A body codec that pipes the body to a write stream.
   * 

* Same as pipe(stream, true). * * @param stream the destination stream * @return the body codec for a write stream */ static BodyCodec pipe(WriteStream stream) { return pipe(stream, true); } /** * A body codec that pipes the body to a write stream. * * @param stream the destination stream * @param close whether the destination stream should be closed * @return the body codec for a write stream */ static BodyCodec pipe(WriteStream stream, boolean close) { StreamingBodyCodec bodyCodec = new StreamingBodyCodec(stream, close); bodyCodec.init(); return bodyCodec; } /** * A body codec that parse the response as a JSON stream. * * @param parser the non-null JSON parser to emits the JSON object. The parser must be configured for the stream. Not * e that you need to keep a reference on the parser to retrieved the JSON events. * @return the body codec for a write stream */ static BodyCodec jsonStream(JsonParser parser) { return new JsonStreamBodyCodec(parser); } /** * Create the {@link BodyStream}. *

* This method is usually called for creating the pump for the HTTP response and should not be called directly. */ @GenIgnore void create(Handler>> handler); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy