
net.alloyggp.escaperope.rope.ropify.CoreWeavers Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of escape-rope Show documentation
Show all versions of escape-rope Show documentation
A library for turning structured data into strings and back.
package net.alloyggp.escaperope.rope.ropify;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import net.alloyggp.escaperope.rope.Rope;
import net.alloyggp.escaperope.rope.StringRope;
//TODO: Fill this out with additional core weavers.
public class CoreWeavers {
public static final RopeWeaver INTEGER = new RopeWeaver() {
@Override
public Rope toRope(Integer i) {
return StringRope.create(i.toString());
}
@Override
public Integer fromRope(Rope rope) {
return Integer.valueOf(rope.asString());
}
};
//TODO: Should this have wildcards somewhere?
public static RopeWeaver> listOf(final RopeWeaver innerTypeWeaver) {
return new ListRopeWeaver>() {
@Override
protected void addToList(List objects, RopeBuilder list) {
for (T object : objects) {
list.add(innerTypeWeaver.toRope(object));
}
}
@Override
public List fromRope(RopeList ropes) {
List objects = new ArrayList<>(ropes.size());
for (Rope rope : ropes) {
objects.add(innerTypeWeaver.fromRope(rope));
}
return objects;
}
};
}
public static RopeWeaver> setOf(final RopeWeaver innerTypeWeaver) {
return new ListRopeWeaver>() {
@Override
protected void addToList(Set objects, RopeBuilder list) {
for (T object : objects) {
list.add(innerTypeWeaver.toRope(object));
}
}
@Override
public Set fromRope(RopeList ropes) {
Set objects = new LinkedHashSet<>(ropes.size());
for (Rope rope : ropes) {
objects.add(innerTypeWeaver.fromRope(rope));
}
return objects;
}
};
}
//TODO: Singleton?
public static RopeWeaver> listOfIntegers() {
return listOf(INTEGER);
}
public static > RopeWeaver enumOf(final Class enumClass) {
return new RopeWeaver() {
@Override
public Rope toRope(E object) {
return StringRope.create(object.name());
}
@Override
public E fromRope(Rope rope) {
return Enum.valueOf(enumClass, rope.asString());
}
};
}
public static RopeWeaver singletonOf(final T singleton) {
return new RopeWeaver() {
@Override
public Rope toRope(T object) {
return StringRope.create("");
}
@Override
public T fromRope(Rope rope) {
return singleton;
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy