import { BinaryNode } from '../WABinary'
import { USyncUser } from '../WAUSync'

/**
 * Defines the interface for a USyncQuery protocol
 */
export interface USyncQueryProtocol {
   /**
    * The name of the protocol
    */
   name: string
   /**
    * Defines what goes inside the query part of a USyncQuery
    */
   getQueryElement: () => BinaryNode
   /**
    * Defines what goes inside the user part of a USyncQuery
    */
   getUserElement: (user: USyncUser) => BinaryNode | null
   /**
    * Parse the result of the query
    * @param data Data from the result
    * @returns Whatever the protocol is supposed to return
    */
   parser: (data: BinaryNode) => unknown
}