Following the pattern in the other classes of this package, do we want these fields to be private and to use `@JsonProperty("link") ` on the parameters of the constructor? (and `@Nullable` for metadata parameter).

Other methods also have equals/hashcode/toString. Not sure how important that is.

Constructor should take `Map<String,?> metadata` rather than only `Map<String,Object>`.