hove-io / transit_model

Managing transit data with Rust
GNU Affero General Public License v3.0
55 stars 28 forks source link

Tighter typed Ids #180

Open antoine-de opened 5 years ago

antoine-de commented 5 years ago

The Collectionand Idx are really great to have lots of statically checked stuff.

The transit model has a lot of links between the objects, and for the moment all those links are Strings. I think navitia_model could be even better if those String ids were also typed.

For example the stop_area_id in the StopPoint could be a Identifier<StopArea> instead of a String.

We could then also remove the get_idx/get method in CollectionWithId<T> to take an &Identifier<T> instead of a &str.

We would also need to find a nice name for this identifier. I don't think we can use the obvious Id because it's already a Trait. Identifier ? Link ? TypedId ? TId ? any other thing ? another option would be to rename the Id trait (maybe to HasId ?)

What do you think ?

datanel commented 5 years ago

navitia_model could be even better if those String ids were also typed.

why? for semantic?

antoine-de commented 5 years ago

for semantic but mainly it would make some bugs impossible, something like:

collections.stop_points.get(my_stop_point.stop_area_id)

we will get a nice build error saying that we are mixing StopPoint and StopArea

prhod commented 5 years ago

I think it's a good idea, but i have concern about the code complexity it would imply.