sclass PostRequest { S method = "POST"; S url; MapSO params = new LinkedHashMap; SS headers = new LinkedHashMap; *() {} *(S *url, O... _) { params = paramsToMap(_); } S perform() { ret doPostWithHeaders(url, headers, params); } selfType set(S param, O value) { params.put(param, value); this; } selfType switchToGet() { method = "GET"; this; } }