@pmouli/isy-matter-server
Version:
Service to expose an ISY device as a Matter Border router
39 lines (35 loc) • 1.42 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;
}