🔀 Control Flow ​
Control flow allows you to make decisions and iterate over data in your configurations. RESL provides conditional expressions and powerful collection transformations.
🔄 Conditional Expressions ​
RESL uses the ternary operator ? condition : then_value | else_value for conditional logic.
Basic Conditionals ​
resl
{
age = 25;
status = ? (age >= 18) : "adult" | "minor";
is_weekend = true;
work_mode = ? is_weekend : "relaxed" | "busy";
score = 85;
grade = ? (score >= 90) : "A" | "B";
["status": status, "mode": work_mode, "grade": grade]
}Nested Conditionals ​
Chain multiple conditions for complex logic:
resl
{
score = 85;
grade = ? (score >= 90) : "A"
| ? (score >= 80) : "B"
| ? (score >= 70) : "C"
| ? (score >= 60) : "D"
| "F";
temperature = 75;
clothing = ? (temperature > 80) : "shorts"
| ? (temperature > 60) : "pants"
| "jacket";
["grade": grade, "clothing": clothing]
}Complex Conditions ​
Use logical operators in conditions:
resl
{
age = 25;
has_license = true;
has_car = false;
can_drive = ? (age >= 16 && has_license) : true | false;
transportation = ? (can_drive && has_car) : "drive"
| ? can_drive : "rideshare"
| "public_transport";
time_of_day = "evening";
is_weekend = true;
activity = ? (is_weekend && time_of_day == "evening") : "social"
| ? (is_weekend) : "relaxation"
| "work";
["can_drive": can_drive, "transport": transportation, "activity": activity]
}Environment-Based Configuration ​
resl
{
environment = "production";
debug_flag = false;
log_level = ? (environment == "development") : "debug"
| ? (environment == "staging") : "info"
| "error";
database_host = ? (environment == "production") : "prod-db.example.com"
| ? (environment == "staging") : "staging-db.example.com"
| "localhost";
ssl_enabled = ? (environment == "production" || environment == "staging") : true | false;
config = [
"log_level": log_level,
"database": ["host": database_host, "ssl": ssl_enabled],
"debug": ? debug_flag : true | false
];
config
}🎠For-Each Transformations ​
Transform collections using the > operator with (index, element) : expression syntax for lists and (key, value) : expression syntax for maps.
Basic List Transformations ​
resl
{
numbers = [1, 2, 3, 4, 5];
doubled = numbers > (i, n) : n * 2;
indexed = numbers > (i, n) : ["pos": i, "val": n];
evens = numbers > (i, n) : ? (n % 2 == 0) : n | null;
["doubled": doubled, "indexed": indexed, "evens": evens]
}Map Transformations ​
resl
{
users = [
"alice": ["age": 30, "role": "admin"],
"bob": ["age": 25, "role": "user"],
"charlie": ["age": 35, "role": "user"]
];
user_list = users > (name, info) : [
"username": name,
"age": info["age"],
"role": info["role"],
"is_admin": ? (info["role"] == "admin") : true | false
];
ages = users > (name, info) : info["age"];
["users": user_list, "ages": ages]
}Complex Transformations ​
resl
{
services = ["auth", "api", "worker", "web"];
base_port = 8080;
environment = "production";
service_configs = services > (i, name) : [
"name": name,
"image": concat("myapp/", name, ":latest"),
"port": base_port + i,
"replicas": ? (name == "web") : 3 | 1,
"resources": [
"cpu": ? (name == "worker") : "2000m" | "500m",
"memory": ? (name == "worker") : "2Gi" | "512Mi"
],
"env": [
"SERVICE_NAME": name,
"ENVIRONMENT": environment,
"PORT": to_str(base_port + i)
]
];
["services": service_configs]
}Data Processing Patterns ​
resl
{
raw_data = [
["name": "Alice", "score": 85, "department": "engineering"],
["name": "Bob", "score": 92, "department": "marketing"],
["name": "Charlie", "score": 78, "department": "engineering"],
["name": "Diana", "score": 96, "department": "sales"]
];
employee_reports = raw_data > (i, employee) : [
"id": i + 1,
"name": employee["name"],
"department": employee["department"],
"score": employee["score"],
"grade": ? (employee["score"] >= 90) : "excellent"
| ? (employee["score"] >= 80) : "good"
| ? (employee["score"] >= 70) : "satisfactory"
| "needs_improvement",
"bonus_eligible": ? (employee["score"] >= 85) : true | false
];
["reports": employee_reports]
}🎯 Combining Conditionals and Transformations ​
Dynamic List Building ​
resl
{
features = ["auth", "logging", "metrics", "cache", "search"];
environment = "production";
budget_tier = "premium";
enabled_features = features > (i, feature) :
? (feature == "auth") : feature
| ? (feature == "logging") : feature
| ? (feature == "metrics" && environment == "production") : feature
| ? (feature == "cache" && budget_tier == "premium") : feature
| ? (feature == "search" && budget_tier == "premium") : feature
| null;
["enabled": enabled_features]
}Configuration Matrix ​
resl
{
environments = ["dev", "staging", "prod"];
env_configs = environments > (i, env) : [
"name": env,
"database": [
"host": concat(env, "-db.example.com"),
"port": 5432,
"ssl": ? (env == "prod") : true | false,
"pool_size": ? (env == "prod") : 20 | ? (env == "staging") : 10 | 5
],
"logging": [
"level": ? (env == "dev") : "debug" | ? (env == "staging") : "info" | "error",
"format": ? (env == "prod") : "json" | "text"
],
"resources": [
"cpu": ? (env == "prod") : "2000m" | ? (env == "staging") : "1000m" | "500m",
"memory": ? (env == "prod") : "4Gi" | ? (env == "staging") : "2Gi" | "1Gi"
]
];
["environments": env_configs]
}🔍 Advanced Patterns ​
Validation and Defaults ​
resl
{
user_input = ["port": 0, "name": "", "ssl": null];
validated_config = [
"port": ? (user_input["port"] > 0) : user_input["port"] | 8080,
"name": ? (length(user_input["name"]) > 0) : user_input["name"] | "default-service",
"ssl": ? (user_input["ssl"] != null) : user_input["ssl"] | false
];
["config": validated_config]
}Feature Flags and Rollouts ​
resl
{
user_segments = ["new_users", "premium_users", "beta_testers"];
feature_rollouts = user_segments > (i, segment) : [
"segment": segment,
"features": [
"new_ui": ? (segment == "beta_testers") : true | false,
"advanced_search": ? (segment == "premium_users" || segment == "beta_testers") : true | false,
"mobile_app": ? (segment != "new_users") : true | false
]
];
["rollouts": feature_rollouts]
}Resource Scaling ​
resl
{
load_levels = ["low", "medium", "high", "peak"];
scaling_configs = load_levels > (i, level) : [
"load_level": level,
"replicas": ? (level == "peak") : 10
| ? (level == "high") : 6
| ? (level == "medium") : 3
| 1,
"resources": [
"cpu": ? (level == "peak" || level == "high") : "2000m" | "1000m",
"memory": ? (level == "peak") : "4Gi"
| ? (level == "high") : "2Gi"
| "1Gi"
],
"autoscaling": [
"enabled": ? (level == "peak" || level == "high") : true | false,
"min_replicas": ? (level == "peak") : 5 | ? (level == "high") : 3 | 1,
"max_replicas": ? (level == "peak") : 20 | ? (level == "high") : 10 | 5
]
];
["scaling": scaling_configs]
}