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

co.nstant.in.cbor.CborBuilder Maven / Gradle / Ivy

Go to download

Java implementation of RFC 7049: Concise Binary Object Representation (CBOR)

The newest version!
package co.nstant.in.cbor;

import java.math.BigInteger;
import java.util.LinkedList;
import java.util.List;

import co.nstant.in.cbor.builder.AbstractBuilder;
import co.nstant.in.cbor.builder.ArrayBuilder;
import co.nstant.in.cbor.builder.ByteStringBuilder;
import co.nstant.in.cbor.builder.MapBuilder;
import co.nstant.in.cbor.builder.UnicodeStringBuilder;
import co.nstant.in.cbor.model.Array;
import co.nstant.in.cbor.model.ByteString;
import co.nstant.in.cbor.model.DataItem;
import co.nstant.in.cbor.model.Map;
import co.nstant.in.cbor.model.UnicodeString;

public class CborBuilder extends AbstractBuilder {

    private final LinkedList dataItems = new LinkedList<>();

    public CborBuilder() {
        super(null);
    }

    public CborBuilder reset() {
        dataItems.clear();
        return this;
    }

    public List build() {
        return dataItems;
    }

    public CborBuilder add(DataItem dataItem) {
        dataItems.add(dataItem);
        return this;
    }

    public CborBuilder add(long value) {
        add(convert(value));
        return this;
    }

    public CborBuilder add(BigInteger value) {
        add(convert(value));
        return this;
    }

    public CborBuilder add(boolean value) {
        add(convert(value));
        return this;
    }

    public CborBuilder add(float value) {
        add(convert(value));
        return this;
    }

    public CborBuilder add(double value) {
        add(convert(value));
        return this;
    }

    public CborBuilder add(byte[] bytes) {
        add(convert(bytes));
        return this;
    }

    public ByteStringBuilder startByteString() {
        return startByteString(null);
    }

    public ByteStringBuilder startByteString(byte[] bytes) {
        add(new ByteString(bytes).setChunked(true));
        return new ByteStringBuilder(this);
    }

    public CborBuilder add(String string) {
        add(convert(string));
        return this;
    }

    public UnicodeStringBuilder startString() {
        return startString(null);
    }

    public UnicodeStringBuilder startString(String string) {
        add(new UnicodeString(string).setChunked(true));
        return new UnicodeStringBuilder(this);
    }

    public CborBuilder addTag(long value) {
        add(tag(value));
        return this;
    }

    public CborBuilder tagged(long value) {
        DataItem item = dataItems.peekLast();
        if (item == null) {
            throw new IllegalStateException("Can't add a tag before adding an item");
        }
        item.getOuterTaggable().setTag(value);
        return this;
    }

    public ArrayBuilder startArray() {
        Array array = new Array();
        array.setChunked(true);
        add(array);
        return new ArrayBuilder(this, array);
    }

    public ArrayBuilder addArray() {
        Array array = new Array();
        add(array);
        return new ArrayBuilder(this, array);
    }

    public MapBuilder addMap() {
        Map map = new Map();
        add(map);
        return new MapBuilder(this, map);
    }

    public MapBuilder startMap() {
        Map map = new Map();
        map.setChunked(true);
        add(map);
        return new MapBuilder(this, map);
    }

    @Override
    protected void addChunk(DataItem dataItem) {
        add(dataItem);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy