com.codepoetics:vaporetto

Sonatype helps open source projects to set up Maven repositories on https://oss.sonatype.org/

GroupId

GroupId

com.codepoetics
ArtifactId

ArtifactId

vaporetto
Last Version

Last Version

1.2
Release Date

Release Date

Type

Type

jar
Description

Description

Sonatype helps open source projects to set up Maven repositories on https://oss.sonatype.org/
Source Code Management

Source Code Management

http://github.com/poetix/vaporetto

Download vaporetto

How to add to project

<!-- https://jarcasting.com/artifacts/com.codepoetics/vaporetto/ -->
<dependency>
    <groupId>com.codepoetics</groupId>
    <artifactId>vaporetto</artifactId>
    <version>1.2</version>
</dependency>
// https://jarcasting.com/artifacts/com.codepoetics/vaporetto/
implementation 'com.codepoetics:vaporetto:1.2'
// https://jarcasting.com/artifacts/com.codepoetics/vaporetto/
implementation ("com.codepoetics:vaporetto:1.2")
'com.codepoetics:vaporetto:jar:1.2'
<dependency org="com.codepoetics" name="vaporetto" rev="1.2">
  <artifact name="vaporetto" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.codepoetics', module='vaporetto', version='1.2')
)
libraryDependencies += "com.codepoetics" % "vaporetto" % "1.2"
[com.codepoetics/vaporetto "1.2"]

Dependencies

test (2)

Group / Artifact Type Version
junit : junit jar 4.12
org.hamcrest : hamcrest-all jar 1.3

Project Modules

There are no modules declared in this project.

Vaporetto

Build Status Maven Central

Very lightweight proxy-based immutable value types for Java 8. (Compare phantom-pojos, an earlier iteration of the same idea).

Define types as follows:

public interface Address extends VType<Address> {
    Collection<String> addressLines();
    String postcode();
}

public interface Person extends VType<Person> {
    String name();
    int age();
    Address address();
}

Build values like this:

Person person = Vaporetto.build(Person.class, p -> p
    .with(Person::name, "Arthur Putey")
    .with(Person::age, 42)
    .with(Person::address, a -> a
        .with(Address::addressLines, "23 Acacia Avenue", "Sunderland")
        .with(Address::postcode, "VB6 5UX")));

Update values like this:

Person updated = person.update(p -> p
    .with(Person::age, 43));

Reify properties into lenses like this:

Property<Person, Address> address = Property.of(Person.class, Person::address);
Property<Address, String> postcode = Property.of(Address.class, Address::postcode);
Property<Person, String> addressPostcode = address.chain(postcode);

// OR
Property<Person, String> addressPostcode = Property.of(
    Property.of(Person.class, Person::Address),
    Address::postcode);

assertThat(addressPostcode.get(person), equalTo("VB6 5UX"));

Person updatedPerson = addressPostcode.update(person, "RA8 81T");
assertThat(updatedPerson.address().postcode(), equalTo("RA8 81T"));

Versions

Version
1.2
1.1
1.0