-
Steven Allen authored
It's a lie! We: 1. Assume that our datastores are thread-safe all over the place, not bothering to check for this interface. 2. Implement this interface for, e.g., the mount datastore that _may not_ be thread-safe (depending on the sub-datastores). Basically, there's no sane way to to do something like this in go. What we _want_ is: ```rust pub trait ThreadSafe {} struct MyWrapper<D: Datastore> { ... } impl<D: Datastore> ThreadSafe for MyWrapper<D> where D: ThreadSafe {} ``` Actually, we don't even need this because rust has already done all the hard work with the `Sync` trait. .... But we're using go which barely has types. --- For completeness, it's actually possible to do this in go: ```go type threadSafeMixin struct{} func (threadSafeMixin) ThreadSafe() {} func NewWrapper(d Datastore) Datastore { if _, ok := d.(ThreadSafe) { return &struct{myWrapper, threadSafeMixin}{myWrapper{d}, threadSafeMixin{}} } return &myWrapper{d} } ``` Let's not.
9f529bc3