/// A keyvalue interface that provides handle-watch operations.
/// 
/// This interface is used to provide event-driven mechanisms to handle
/// keyvalue changes.
interface handle-watch {
	/// A keyvalue interface that provides handle-watch operations.
	use types.{bucket, key, incoming-value};

	/// Handle the `set` event for the given bucket and key. 
	/// It returns a `incoming-value` that represents the new value being set.
	/// The new value can be consumed by the handler.
	on-set: func(bucket: bucket, key: key, incoming-value: borrow<incoming-value>);

	/// Handle the `delete` event for the given bucket and key.
	/// It returns a `key` that represents the key being deleted.
	on-delete: func(bucket: bucket, key: key);
}