You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: mongodb.rs
    path of file: ./repos/backend/crates/core/database/src/models/user_settings/ops
    
    the code of the file until where you have to start completion: use ::mongodb::options::FindOneOptions;
use bson::to_bson;
use bson::Document;
use mongodb::options::UpdateOptions;
use revolt_result::Result;

use crate::MongoDb;
use crate::UserSettings;

use super::AbstractUserSettings;

static COL: &str = "user_settings";

#[async_trait]
impl AbstractUserSettings for MongoDb {
    /// Fetch a subset of user settings
    async fn fetch_user_set
    
    async fn fetch_user_settings(&'_ self, id: &str, filter: &'_ [String]) -> Result<UserSettings> {
        let mut projection = doc! {
            "_id": 0,
        };

        for key in filter {
            projection.insert(key, 1);
        }

        Ok(query!(
            self,
            find_one_with_options,
            COL,
            doc! {
                "_id": id
            },
            FindOneOptions::builder().projection(projection).build()
        )?
        .unwrap_or_default())
    }