diff options
author | Aylur <[email protected]> | 2024-11-13 01:30:06 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2024-11-13 01:30:06 +0100 |
commit | 2ce8203ca2ca746709e3478310e9b99727f8592f (patch) | |
tree | 5c33bf9219b10b048338977b1ce9c3230ce8a535 /lang/lua/astal/binding.lua | |
parent | 47f04399166a1e155c7edbd83a98cd043bae2986 (diff) | |
parent | 990feb3ab1ce8221edf03e1babe33a9ce48af54c (diff) |
Merge pull request #65 from tokyob0t/lua-refactor
core: smol lua fixes
Diffstat (limited to 'lang/lua/astal/binding.lua')
-rw-r--r-- | lang/lua/astal/binding.lua | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/lang/lua/astal/binding.lua b/lang/lua/astal/binding.lua index 2944ec4..dd2df7f 100644 --- a/lang/lua/astal/binding.lua +++ b/lang/lua/astal/binding.lua @@ -2,12 +2,14 @@ local lgi = require("lgi") local GObject = lgi.require("GObject", "2.0") ---@class Binding ----@field emitter table|Variable +---@field emitter table | Variable | userdata ---@field property? string ---@field transform_fn function +---@overload fun(emitter: table | userdata, property?: string): Binding local Binding = {} +Binding.__index = Binding ----@param emitter table +---@param emitter table | Variable | userdata ---@param property? string ---@return Binding function Binding.new(emitter, property) @@ -28,14 +30,15 @@ function Binding:__tostring() return str .. ">" end +---@return any function Binding:get() if self.property ~= nil and GObject.Object:is_type_of(self.emitter) then return self.transform_fn(self.emitter[self.property]) - end - if type(self.emitter.get) == "function" then + elseif type(self.emitter.get) == "function" then return self.transform_fn(self.emitter:get()) + else + error("can not get: Not a GObject or a Variable " + self) end - error("can not get: Not a GObject or a Variable " + self) end ---@param transform fun(value: any): any @@ -58,14 +61,17 @@ function Binding:subscribe(callback) return function() GObject.signal_handler_disconnect(self.emitter, id) end - end - if type(self.emitter.subscribe) == "function" then + elseif type(self.emitter.subscribe) == "function" then return self.emitter:subscribe(function() callback(self:get()) end) + else + error("can not subscribe: Not a GObject or a Variable " + self) end - error("can not subscribe: Not a GObject or a Variable " + self) end -Binding.__index = Binding -return Binding +return setmetatable(Binding, { + __call = function(_, emitter, prop) + return Binding.new(emitter, prop) + end, +}) |