class Message {

	public <V> Result<V, Failure> body(final Format<V> format) {

		if ( format == null ) {
			throw new NullPointerException("null body");
		}

		final V cached=(V)bodies.get(format);

		return cached != null ? Value(cached) : format.get(self()).value(value -> {

			bodies.put(format, value);

			return value;

		});

	}

}