25 lines
755 B
Python
25 lines
755 B
Python
from collections.abc import Awaitable, Callable
|
|
from dataclasses import dataclass, field
|
|
|
|
|
|
@dataclass
|
|
class Plugin:
|
|
id: str
|
|
title: str
|
|
description: str = ""
|
|
skeleton_fn: Callable[[], Awaitable[str]] | None = field(default=None)
|
|
open_fn: Callable[[], Awaitable[None]] | None = field(default=None)
|
|
close_fn: Callable[[], Awaitable[None]] | None = field(default=None)
|
|
|
|
async def skeleton(self) -> str:
|
|
if self.skeleton_fn is None:
|
|
raise NotImplementedError
|
|
return await self.skeleton_fn()
|
|
|
|
async def open(self) -> None:
|
|
if self.open_fn is not None:
|
|
await self.open_fn()
|
|
|
|
async def close(self) -> None:
|
|
if self.close_fn is not None:
|
|
await self.close_fn()
|