• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Blightmud / Blightmud / 14316676040

07 Apr 2025 06:27PM UTC coverage: 74.417% (-0.9%) from 75.283%
14316676040

push

github

web-flow
Merge pull request #1202 from Blightmud/dependabot/cargo/rustls-0.23.25

build(deps): bump rustls from 0.23.23 to 0.23.25

7089 of 9526 relevant lines covered (74.42%)

431.56 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

53.75
/src/lua/plugin/handler.rs
1
use mlua::{UserData, UserDataMethods};
2

3
use crate::io::SaveData;
4
use crate::lua::{backend::Backend, constants::BACKEND};
5

6
use super::{
7
    functions::{
8
        add_plugin, get_plugin_dir, get_plugins, load_plugin, remove_plugin, update_plugin,
9
    },
10
    settings::AutoLoadPlugins,
11
};
12

13
pub struct Handler {}
14

15
impl Handler {
16
    pub fn new() -> Self {
167✔
17
        Self {}
167✔
18
    }
167✔
19
}
20

21
impl UserData for Handler {
22
    fn add_methods<'lua, T: UserDataMethods<'lua, Self>>(methods: &mut T) {
167✔
23
        methods.add_function("add", |ctx, (url, with_submodules): (String, bool)| {
167✔
24
            let backend: Backend = ctx.named_registry_value(BACKEND)?;
×
25
            let writer = backend.writer;
×
26
            add_plugin(writer, &url, with_submodules);
×
27
            Ok(())
×
28
        });
×
29
        methods.add_function(
167✔
30
            "load",
31
            |ctx, name: String| -> mlua::Result<(bool, String)> {
×
32
                let backend: Backend = ctx.named_registry_value(BACKEND)?;
×
33
                if let Err(err) = load_plugin(&name, &backend.writer) {
×
34
                    Ok((false, err.to_string()))
×
35
                } else {
36
                    Ok((true, String::new()))
×
37
                }
38
            },
×
39
        );
40
        methods.add_function("remove", |_, name: String| {
167✔
41
            let mut auto = AutoLoadPlugins::load();
×
42
            auto.remove(&name);
×
43
            auto.save();
×
44
            if let Err(err) = remove_plugin(&name) {
×
45
                Ok((false, err.to_string()))
×
46
            } else {
47
                Ok((true, String::new()))
×
48
            }
49
        });
×
50
        methods.add_function("get_all", |_, ()| -> mlua::Result<Vec<String>> {
167✔
51
            Ok(get_plugins())
×
52
        });
×
53
        methods.add_function("update", |ctx, name: String| {
167✔
54
            let backend: Backend = ctx.named_registry_value(BACKEND)?;
×
55
            let writer = backend.writer;
×
56
            update_plugin(writer, &name);
×
57
            Ok(())
×
58
        });
×
59
        methods.add_function("enable", |_, name: String| {
167✔
60
            if get_plugins().contains(&name) {
×
61
                let mut auto = AutoLoadPlugins::load();
×
62
                auto.insert(name);
×
63
                auto.save();
×
64
            }
×
65
            Ok(())
×
66
        });
×
67
        methods.add_function("disable", |_, name: String| {
167✔
68
            let mut auto = AutoLoadPlugins::load();
×
69
            auto.remove(&name);
×
70
            auto.save();
×
71
            Ok(())
×
72
        });
×
73
        methods.add_function("enabled", |_, _: ()| -> mlua::Result<Vec<String>> {
167✔
74
            let autoloaded = AutoLoadPlugins::load();
165✔
75
            Ok(autoloaded.iter().cloned().collect())
165✔
76
        });
165✔
77
        methods.add_function("dir", |_, name: Option<String>| -> mlua::Result<String> {
167✔
78
            if let Some(name) = name {
2✔
79
                Ok(get_plugin_dir().join(name).to_string_lossy().to_string())
1✔
80
            } else {
81
                Ok(get_plugin_dir().to_string_lossy().to_string())
1✔
82
            }
83
        });
2✔
84
    }
167✔
85
}
86

87
#[cfg(test)]
88
mod test_plugin {
89
    use mlua::Lua;
90

91
    use super::Handler;
92

93
    fn get_lua_state() -> Lua {
2✔
94
        let plugin = Handler::new();
2✔
95
        let lua = Lua::new();
2✔
96
        lua.globals().set("plugin", plugin).unwrap();
2✔
97
        lua
2✔
98
    }
2✔
99

100
    #[test]
101
    fn test_dir() {
1✔
102
        let lua = get_lua_state();
1✔
103
        assert!(lua
1✔
104
            .load("return plugin.dir()")
1✔
105
            .call::<_, String>(())
1✔
106
            .unwrap()
1✔
107
            .ends_with(".run/test/data/plugins"));
1✔
108
    }
1✔
109

110
    #[test]
111
    fn test_named_dir() {
1✔
112
        let lua = get_lua_state();
1✔
113
        assert!(lua
1✔
114
            .load("return plugin.dir(\"awesome\")")
1✔
115
            .call::<_, String>(())
1✔
116
            .unwrap()
1✔
117
            .ends_with(".run/test/data/plugins/awesome"));
1✔
118
    }
1✔
119
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc