import 'package:platform_config/platform_config.dart'; void main() { // Create a new Repository instance with some initial configuration final config = Repository({ 'app': { 'name': 'Protevus Demo App', 'version': '1.0.0', 'debug': true, }, 'database': { 'default': 'mysql', 'connections': { 'mysql': { 'host': 'localhost', 'port': 3306, 'database': 'protevus_demo', 'username': 'demo_user', 'password': 'secret', }, 'redis': { 'host': 'localhost', 'port': 6379, }, }, }, 'cache': { 'default': 'redis', 'stores': { 'redis': { 'driver': 'redis', 'connection': 'default', }, 'file': { 'driver': 'file', 'path': '/tmp/cache', }, }, }, 'logging': { 'channels': ['file', 'console'], 'level': 'info', }, }); // Demonstrate usage of various methods print('Application Name: ${config.string('app.name')}'); print('Debug Mode: ${config.boolean('app.debug') ? 'Enabled' : 'Disabled'}'); // Using get with a default value print('API Version: ${config.get('app.api_version', 'v1')}'); // Accessing nested configuration final dbConfig = config.get('database.connections.mysql'); print('Database Configuration:'); print(' Host: ${dbConfig['host']}'); print(' Port: ${dbConfig['port']}'); print(' Database: ${dbConfig['database']}'); // Using type-specific getters final redisPort = config.integer('database.connections.redis.port'); print('Redis Port: $redisPort'); // Checking for existence of a key if (config.has('cache.stores.memcached')) { print('Memcached configuration exists'); } else { print('Memcached configuration does not exist'); } // Setting a new value config.set('app.timezone', 'UTC'); print('Timezone: ${config.string('app.timezone')}'); // Getting multiple values at once final loggingConfig = config.getMany(['logging.channels', 'logging.level']); print('Logging Configuration:'); print(' Channels: ${loggingConfig['logging.channels']}'); print(' Level: ${loggingConfig['logging.level']}'); // Using array method final logChannels = config.array('logging.channels'); print('Log Channels: $logChannels'); // Demonstrating error handling try { config.integer('app.name'); } catch (e) { print('Error: $e'); } // Using the Repository as a Map config['new.feature.enabled'] = true; print('New Feature Enabled: ${config['new.feature.enabled']}'); // Demonstrating Macroable functionality Repository.macro('getConnectionUrl', (Repository repo, String connection) { final conn = repo.get('database.connections.$connection'); return 'mysql://${conn['username']}:${conn['password']}@${conn['host']}:${conn['port']}/${conn['database']}'; }); final mysqlUrl = config.callMacro('getConnectionUrl', ['mysql']); print('MySQL Connection URL: $mysqlUrl'); }