#pragma once namespace Canary { class Config; typedef Config* PConfig; class Config { public: STATUS init(INT32 argc, PCHAR argv[]); template class Value { public: T value; BOOL initialized = FALSE; }; Value endpoint; Value label; Value channelName; Value clientId; Value isMaster; Value runBothPeers; Value trickleIce; Value useTurn; Value forceTurn; Value useIotCredentialProvider; // credentials Value accessKey; Value secretKey; Value sessionToken; Value region; Value iotCoreCredentialEndPointFile; Value iotCoreCert; Value iotCorePrivateKey; Value iotCoreRoleAlias; // logging Value logLevel; Value logGroupName; Value logStreamName; Value duration; Value iterationDuration; Value bitRate; Value frameRate; Value caCertPath; BYTE iotEndpoint[MAX_CONFIG_JSON_FILE_SIZE]; VOID print(); private: STATUS initWithJSON(PCHAR); STATUS initWithEnvVars(); }; } // namespace Canary