package com.grack.nanojson;
import java.util.Collection;
import java.util.Map;
/**
* Common interface for {@link JsonAppendableWriter}, {@link JsonStringWriter} and {@link JsonBuilder}.
*
* @param <SELF>
* A subclass of {@link JsonSink}.
*/
public interface JsonSink<SELF extends JsonSink<SELF>> {
/**
* Emits the start of an array.
*/
SELF array(Collection<?> c);
/**
* Emits the start of an array with a key.
*/
SELF array(String key, Collection<?> c);
/**
* Emits the start of an object.
*/
SELF object(Map<?, ?> map);
/**
* Emits the start of an object with a key.
*/
SELF object(String key, Map<?, ?> map);
/**
* Emits a 'null' token.
*/
SELF nul();
/**
* Emits a 'null' token with a key.
*/
SELF nul(String key);
/**
* Emits an object if it is a JSON-compatible type, otherwise throws an exception.
*/
SELF value(Object o);
/**
* Emits an object with a key if it is a JSON-compatible type, otherwise throws an exception.
*/
SELF value(String key, Object o);
/**
* Emits a string value (or null).
*/
SELF value(String s);
/**
* Emits an integer value.
*/
SELF value(int i);
/**
* Emits a long value.
*/
SELF value(long l);
/**
* Emits a boolean value.
*/
SELF value(boolean b);
/**
* Emits a double value.
*/
SELF value(double d);
/**
* Emits a float value.
*/
SELF value(float f);
/**
* Emits a {@link Number} value.
*/
SELF value(Number n);
/**
* Emits a string value (or null) with a key.
*/
SELF value(String key, String s);
/**
* Emits an integer value with a key.
*/
SELF value(String key, int i);
/**
* Emits a long value with a key.
*/
SELF value(String key, long l);
/**
* Emits a boolean value with a key.
*/
SELF value(String key, boolean b);
/**
* Emits a double value with a key.
*/
SELF value(String key, double d);
/**
* Emits a float value with a key.
*/
SELF value(String key, float f);
/**
* Emits a {@link Number} value with a key.
*/
SELF value(String key, Number n);
/**
* Starts an array.
*/
SELF array();
/**
* Starts an object.
*/
SELF object();
/**
* Starts an array within an object, prefixed with a key.
*/
SELF array(String key);
/**
* Starts an object within an object, prefixed with a key.
*/
SELF object(String key);
/**
* Ends the current array or object.
*/
SELF end();
}