diff --git a/wit/core.wit b/wit/core.wit deleted file mode 100644 index 01b023c..0000000 --- a/wit/core.wit +++ /dev/null @@ -1,113 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* Copyright © 2026 Eduard Smet */ - -interface core-types { - type json = string; - - type host-error = string; - - type plugin-error = string; -} - -interface core-import-types { - use core-types.{host-error}; - - // Services - use job-scheduler-import-types.{job-scheduler-registrations, job-scheduler-registrations-result, job-scheduler-deregistrations, job-scheduler-deregistrations-result}; - use discord-import-types.{discord-registrations, discord-registrations-result, discord-deregistrations, discord-deregistrations-result}; - - enum log-levels { - trace, - debug, - info, - warn, - error, - } - - record registrations { - core: option, - services: option, - } - - record core-registrations { - dependency-functions: option>, - } - - record services-registrations { - job-scheduler: option, - discord: option, - } - - record registrations-result { - core: option, - services: option, - } - - record core-registrations-result { - dependency-functions: option, host-error>>, - } - - record services-registrations-result { - job-scheduler: option>, - discord: option> - } - - record deregistrations { - core: option, - services: option, - } - - record core-deregistrations { - dependency-functions: option> - } - - record services-deregistrations { - job-scheduler: option, - discord: option, - } - - record deregistrations-result { - core: option, - services: option, - } - - record core-deregistrations-result { - dependency-functions: option> - } - - record services-deregistrations-result { - job-scheduler: option>, - discord: option>, - } -} - -interface core-import-functions { - use core-types.{host-error}; - use core-import-types.{deregistrations, deregistrations-result, log-levels, registrations, registrations-result}; - - - register: func(registrations: registrations) -> registrations-result; - deregister: func(deregistrations: deregistrations) -> deregistrations-result; - - log: func(level: log-levels, message: string); - - get-state: func(key: string) -> result>, host-error>; - set-state: func(key: string, value: list) -> result<_, host-error>; - clear-state: func() -> result<_, host-error>; - - dependency-function: func(registry-id: string, plugin-id: string, function-id: string, plugin-version: option, params: list) -> result, host-error>; - - remove: func(reason: string); - shutdown: func(restart: bool) -> result<_, host-error>; -} - -interface core-export-functions { - use core-types.{json, plugin-error}; - - initialization: func(settings: json) -> result<_, plugin-error>; - - dependency-function: func(function-id: string, params: list) -> result, plugin-error>; - - shutdown: func() -> result<_, plugin-error>; -} - diff --git a/wit/discord.wit b/wit/deps/wpbs-services:discord/types.wit similarity index 85% rename from wit/discord.wit rename to wit/deps/wpbs-services:discord/types.wit index abd3df2..b968875 100644 --- a/wit/discord.wit +++ b/wit/deps/wpbs-services:discord/types.wit @@ -1,14 +1,16 @@ /* SPDX-License-Identifier: GPL-3.0-or-later */ /* Copyright © 2026 Eduard Smet */ +use wpbs:shared/shared-types@0.1.0-rc.1; + +@since(version = 0.1.0-rc.1) interface discord-types { - type snowflake = u64; -} + use shared-types.{host-error, json, plugin-error}; -interface discord-import-types { - use core-types.{host-error, json}; - use discord-types.{snowflake}; + @since(version = 0.1.0-rc.1) + type snowflake = u64; + @since(version = 0.1.0-rc.1) enum discord-event-kinds { message-create, interaction-create, @@ -21,13 +23,16 @@ interface discord-import-types { } // Registrations + @since(version = 0.1.0-rc.1) record discord-registrations { events: option, interactions: option, } + @since(version = 0.1.0-rc.1) type discord-registrations-events = list; + @since(version = 0.1.0-rc.1) record discord-registrations-interactions { application-commands: option>, message-components: option, @@ -35,14 +40,17 @@ interface discord-import-types { } // Registrations Result + @since(version = 0.1.0-rc.1) record discord-registrations-result { events: option, interactions: option, } // Map keys can only be component model primitives + @since(version = 0.1.0-rc.1) type discord-registrations-events-result = result>>, host-error>; + @since(version = 0.1.0-rc.1) record discord-registrations-interactions-result { application-commands: option>, message-components: option, host-error>>, @@ -50,13 +58,16 @@ interface discord-import-types { } // Deregistrations + @since(version = 0.1.0-rc.1) record discord-deregistrations { events: option, interactions: option, } + @since(version = 0.1.0-rc.1) type discord-deregistrations-events = list; + @since(version = 0.1.0-rc.1) record discord-deregistrations-interactions { application-commands: option>, message-components: option>, @@ -64,13 +75,16 @@ interface discord-import-types { } // Deregistrations Result + @since(version = 0.1.0-rc.1) record discord-deregistrations-result { events: option, interactions: option } + @since(version = 0.1.0-rc.1) type discord-deregistrations-events-result = list>>; + @since(version = 0.1.0-rc.1) record discord-deregistrations-interactions-result { application-commands: option, host-error>>, message-components: option, host-error>>, @@ -78,6 +92,7 @@ interface discord-import-types { } // Discord Requests + @since(version = 0.1.0-rc.1) variant discord-requests { // Gateway commands request-guild-members(tuple), @@ -108,28 +123,28 @@ interface discord-import-types { update-interaction-original(tuple), } + @since(version = 0.1.0-rc.1) variant body { json(json), form(form), } + @since(version = 0.1.0-rc.1) record form { boundary: list, buffer: list, } // Discord Responses + @since(version = 0.1.0-rc.1) type discord-responses = json; -} - -interface discord-export-types { - use core-types.{json, plugin-error}; - use discord-types.{snowflake}; // Discord Application Command Registrations Result + @since(version = 0.1.0-rc.1) type discord-registrations-result-application-commands = map>; // Discord Events + @since(version = 0.1.0-rc.1) variant discord-events { interaction-create(json), message-create(json), @@ -141,19 +156,3 @@ interface discord-export-types { thread-update(json), } } - -interface discord-import-functions { - use core-types.{host-error}; - use discord-import-types.{discord-requests, discord-responses}; - - discord-request: func(request: discord-requests) -> result, host-error>; -} - -interface discord-export-functions { - use core-types.{plugin-error}; - use discord-export-types.{discord-events, discord-registrations-result-application-commands}; - - discord-application-commands: func(registrations-result: discord-registrations-result-application-commands); - - discord-event: func(event: discord-events) -> result<_, plugin-error>; -} diff --git a/wit/deps/wpbs-services:discord/world.wit b/wit/deps/wpbs-services:discord/world.wit new file mode 100644 index 0000000..7a9522b --- /dev/null +++ b/wit/deps/wpbs-services:discord/world.wit @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* Copyright © 2026 Eduard Smet */ + +package wpbs-services:discord@0.1.0-rc.1; + +use wpbs:shared/shared-types@0.1.0-rc.1; + +@since(version = 0.1.0-rc.1) +world discord { + @since(version = 0.1.0-rc.1) + import discord-import-functions; + @since(version = 0.1.0-rc.1) + export discord-export-functions; +} + +@since(version = 0.1.0-rc.1) +interface discord-import-functions { + use discord-types.{discord-deregistrations, discord-deregistrations-result, discord-registrations, discord-registrations-result, discord-requests, discord-responses}; + use shared-types.{host-error}; + + @since(version = 0.1.0-rc.1) + register: func(registrations: discord-registrations) -> discord-registrations-result; + @since(version = 0.1.0-rc.1) + deregister: func(deregistrations: discord-deregistrations) -> discord-deregistrations-result; + + @since(version = 0.1.0-rc.1) + discord-request: func(request: discord-requests) -> result, host-error>; +} + +@since(version = 0.1.0-rc.1) +interface discord-export-functions { + use discord-types.{discord-events, discord-registrations-result-application-commands}; + use shared-types.{host-error, plugin-error}; + + @since(version = 0.1.0-rc.1) + discord-application-commands: func(registrations-result: discord-registrations-result-application-commands) -> result<_, plugin-error>; + + @since(version = 0.1.0-rc.1) + discord-event: func(event: discord-events) -> result<_, plugin-error>; +} diff --git a/wit/deps/wpbs-services:job-scheduler/types.wit b/wit/deps/wpbs-services:job-scheduler/types.wit new file mode 100644 index 0000000..6d896fa --- /dev/null +++ b/wit/deps/wpbs-services:job-scheduler/types.wit @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* Copyright © 2026 Eduard Smet */ + +use wpbs:shared/shared-types@0.1.0-rc.1; + +@since(version = 0.1.0-rc.1) +interface job-scheduler-types { + use shared-types.{host-error}; + + @since(version = 0.1.0-rc.1) + type registrations = list; + + @since(version = 0.1.0-rc.1) + type registrations-result = result>, host-error>; + + @since(version = 0.1.0-rc.1) + type deregistrations = list; + + @since(version = 0.1.0-rc.1) + type deregistrations-result = result>, host-error>; +} diff --git a/wit/deps/wpbs-services:job-scheduler/world.wit b/wit/deps/wpbs-services:job-scheduler/world.wit new file mode 100644 index 0000000..5ef030f --- /dev/null +++ b/wit/deps/wpbs-services:job-scheduler/world.wit @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* Copyright © 2026 Eduard Smet */ + +package wpbs-services:job-scheduler@0.1.0-rc.1; + +use wpbs:shared/shared-types@0.1.0-rc.1; + +@since(version = 0.1.0-rc.1) +world job-scheduler { + @since(version = 0.1.0-rc.1) + import job-scheduler-import-functions; + @since(version = 0.1.0-rc.1) + export job-scheduler-export-functions; +} + +@since(version = 0.1.0-rc.1) +interface job-scheduler-import-functions { + use job-scheduler-types.{deregistrations, deregistrations-result, registrations, registrations-result}; + + @since(version = 0.1.0-rc.1) + register: func(registrations: registrations) -> registrations-result; + @since(version = 0.1.0-rc.1) + deregister: func(deregistrations: deregistrations) -> deregistrations-result; +} + +@since(version = 0.1.0-rc.1) +interface job-scheduler-export-functions { + use shared-types.{plugin-error}; + + @since(version = 0.1.0-rc.1) + scheduled-job: func(job-id: string) -> result<_, plugin-error>; +} diff --git a/wit/deps/wpbs:core/types.wit b/wit/deps/wpbs:core/types.wit new file mode 100644 index 0000000..e3922f8 --- /dev/null +++ b/wit/deps/wpbs:core/types.wit @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* Copyright © 2026 Eduard Smet */ + +@since(version = 0.1.0-rc.1) +interface core-types { + @since(version = 0.1.0-rc.1) + enum log-levels { + trace, + debug, + info, + warn, + error, + } +} diff --git a/wit/deps/wpbs:core/world.wit b/wit/deps/wpbs:core/world.wit new file mode 100644 index 0000000..b063b16 --- /dev/null +++ b/wit/deps/wpbs:core/world.wit @@ -0,0 +1,50 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* Copyright © 2026 Eduard Smet */ + +package wpbs:core@0.1.0-rc.1; + +use wpbs:shared/shared-types@0.1.0-rc.1; + +@since(version = 0.1.0-rc.1) +world core { + @since(version = 0.1.0-rc.1) + import core-import-functions; + @since(version = 0.1.0-rc.1) + export core-export-functions; +} + +@since(version = 0.1.0-rc.1) +interface core-import-functions { + use core-types.{log-levels}; + use shared-types.{host-error}; + + @since(version = 0.1.0-rc.1) + log: func(level: log-levels, message: string); + + @since(version = 0.1.0-rc.1) + get-value: func(key: string) -> result>, host-error>; + @since(version = 0.1.0-rc.1) + set-value: func(key: string, value: list) -> result<_, host-error>; + @since(version = 0.1.0-rc.1) + remove-value: func(key: string) -> result>, host-error>; + + @since(version = 0.1.0-rc.1) + get-all-entries: func() -> result>>, host-error>; + @since(version = 0.1.0-rc.1) + clear-all-entries: func() -> result<_, host-error>; + + @since(version = 0.1.0-rc.1) + shutdown: func(restart: bool) -> result<_, host-error>; +} + +@since(version = 0.1.0-rc.1) +interface core-export-functions { + use shared-types.{json, plugin-error}; + + @since(version = 0.1.0-rc.1) + initialization: func(settings: json) -> result<_, plugin-error>; + + @since(version = 0.1.0-rc.1) + shutdown: func() -> result<_, plugin-error>; +} + diff --git a/wit/deps/wpbs:services/world.wit b/wit/deps/wpbs:services/world.wit new file mode 100644 index 0000000..7f3b3a3 --- /dev/null +++ b/wit/deps/wpbs:services/world.wit @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* Copyright © 2026 Eduard Smet */ + +package wpbs:services@0.1.0-rc.1; + +@since(version = 0.1.0-rc.1) +world services { + @since(version = 0.1.0-rc.1) + include wpbs-services:job-scheduler/job-scheduler@0.1.0-rc.1; + @since(version = 0.1.0-rc.1) + include wpbs-services:discord/discord@0.1.0-rc.1; +} diff --git a/wit/deps/wpbs:shared/types.wit b/wit/deps/wpbs:shared/types.wit new file mode 100644 index 0000000..2fd7111 --- /dev/null +++ b/wit/deps/wpbs:shared/types.wit @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* Copyright © 2026 Eduard Smet */ + +package wpbs:shared@0.1.0-rc.1; + +@since(version = 0.1.0-rc.1) +interface shared-types { + @since(version = 0.1.0-rc.1) + type json = list; + + @since(version = 0.1.0-rc.1) + type host-error = string; + + @since(version = 0.1.0-rc.1) + type plugin-error = string; +} diff --git a/wit/job-scheduler.wit b/wit/job-scheduler.wit deleted file mode 100644 index 6caa3cd..0000000 --- a/wit/job-scheduler.wit +++ /dev/null @@ -1,28 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ -/* Copyright © 2026 Eduard Smet */ - -interface job-scheduler-import-types { - use core-types.{host-error}; - - record job-scheduler-registrations { - scheduled-jobs: option>, - } - - record job-scheduler-registrations-result { - scheduled-jobs: option>, host-error>>, - } - - record job-scheduler-deregistrations { - scheduled-jobs: option>, - } - - record job-scheduler-deregistrations-result { - scheduled-jobs: option>>, - } -} - -interface job-scheduler-export-functions { - use core-types.{plugin-error}; - - scheduled-job: func(job-id: string) -> result<_, plugin-error>; -} diff --git a/wit/world.wit b/wit/world.wit index 3c295d2..9d9f8c3 100644 --- a/wit/world.wit +++ b/wit/world.wit @@ -1,14 +1,13 @@ /* SPDX-License-Identifier: GPL-3.0-or-later */ /* Copyright © 2026 Eduard Smet */ -package wpbs:plugin@0.1.0-rc.4; +package wpbs:plugin@0.1.0-rc.1; +@since(version = 0.1.0-rc.1) world plugin { - import core-import-functions; - export core-export-functions; + @since(version = 0.1.0-rc.1) + include wpbs:core/core@0.1.0-rc.1; - export job-scheduler-export-functions; - - import discord-import-functions; - export discord-export-functions; + @since(version = 0.1.0-rc.1) + include wpbs:services/services@0.1.0-rc.1; }