introduce ReadOnlyTypeAdapter to simplify most TypeAdapter needs