             }
         }
         
+        /// Converts this object to a BSONPrimitive
         public func makeBSONPrimitive() -> BSONPrimitive {
             return self.rawValue
         }
     }
     
+    /// Determines whether collation should consider whitespace and punctuation as base characters for purposes of comparison.
     public enum Alternate: String, CustomValueConvertible {
+        /// Whitespace and punctuation are considered base characters.
         case nonIgnorable = "non-ignorable"
+        
+        /// Whitespace and punctuation are not considered base characters and are only distinguished at strength levels greater than 3.
         case shifted
         
+        /// Creates an instance of Alternate from a BSONPrimitive, if possible
         public init?(_ value: BSONPrimitive) {
             guard let string = value.string else {
                 return nil

        self.maxVariable = doc.extract("maxVariable") as IgnorableCharacters?
    }
    
    public func makeBSONPrimitive() -> BSONPrimitive {
        return [
            "locale": locale,

    }
}

/// Used for sharded clusers and replica sets.
///
/// Determines which data to return from a query
///
/// https://docs.mongodb.com/manual/reference/read-concern/#readconcern.
public enum ReadConcern: String, ValueConvertible {
    /// The query returns the instance’s most recent data. Provides no guarantee that the data has been written to a majority of the replica set members
    case local
    
    /// The query returns the instance’s most recent data acknowledged as having been written to a majority of members in the replica set.
    case majority
    
    /// The query returns data that reflects all successful writes issued with a write concern of "majority" and acknowledged prior to the start of the read operation.
    case linearizable
    
    /// Converts this object to a BSONPrimitive
    public func makeBSONPrimitive() -> BSONPrimitive {
        return [
            "level": self.rawValue
