@pmouli/isy-matter-server
Version:
Service to expose an ISY device as a Matter Border router
46 lines (41 loc) • 1.41 kB
text/typescript
import type { MutableEndpoint, SupportedBehaviors } from '@matter/node';
enum RequirementType
{
Client = 1,
Server = 1 << 1,
Optional = 1 << 2,
Mandatory = 1 << 3,
All = Client | Server | Optional | Mandatory,
/*AllServer = Server | Optional | Mandatory,
AllClient = Client | Optional | Mandatory,
AllOptional = Server | Client | Optional,
AllMandatory = Server | Client | Mandatory*/
}
function hasFlag<T extends number>(value: T, flag: T) : boolean
{
return (value & flag) === flag;
}
export function getRequiredBehaviors<D extends MutableEndpoint>(deviceType: D, requirements: RequirementType = RequirementType.All) : SupportedBehaviors
{
let behaviors : SupportedBehaviors = {};
if(hasFlag(requirements,RequirementType.Client))
{
if(hasFlag(requirements,RequirementType.Mandatory))
{
behaviors = {...behaviors, ...deviceType.requirements.client?.mandatory ?? {}};
}
if(hasFlag(requirements,RequirementType.Optional))
{
behaviors = {...behaviors, ...deviceType.requirements.client?.optional ?? {}};
}
}
if (hasFlag(requirements, RequirementType.Server)) {
if (hasFlag(requirements, RequirementType.Mandatory)) {
behaviors = { ...behaviors, ...deviceType.requirements.server?.mandatory ?? {}};
}
if (hasFlag(requirements, RequirementType.Optional)) {
behaviors = { ...behaviors, ...deviceType.requirements.server?.optional ?? {}};
}
}
return behaviors;
}