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: keymap.rs
    path of file: ./repos/zed/crates/gpui/src
    
    the code of the file until where you have to start completion: mod binding;
mod context;
mod matcher;

pub use binding::*;
pub use context::*;
pub(crate) use matcher::*;

use crate::{Action, Keystroke, NoAction};
use collections::{HashMap, HashSet};
use smallvec::SmallVec;
use std::any::{Any, TypeId};

/// An opaque identifier of which version of the keymap is currently active.
//
    
    pub fn binding_enabled(&self, binding: &KeyBinding, context: &[KeyContext]) -> bool {
        // If binding has a context predicate, it must match the current context,
        if let Some(predicate) = &binding.context_predicate {
            if !predicate.eval(context) {
                return false;
            }
        }

        if let Some(disabled_predicates) = self.disabled_keystrokes.get(&binding.keystrokes) {
            for disabled_predicate in disabled_predicates {
                match disabled_predicate {
                    // The binding must not be globally disabled.
                    None => return false,

                    // The binding must not be disabled in the current context.
                    Some(predicate) => {
                        if predicate.eval(context) {
                            return false;
                        }
                    }
                }
            }
        }

        true
    }