mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 00:34:20 +03:00
[okhttp] Add okhttp.newClient() and HttpClientBuilderValue
This commit is contained in:
parent
3eddbbcdef
commit
f1a3511980
@ -6,6 +6,9 @@
|
||||
- Fix passing command-line arguments to scripts
|
||||
- Fix `this` in non-static class methods
|
||||
|
||||
### Modules
|
||||
- [okhttp] Added `okhttp.newClient()` and `HttpClientBuilderValue`
|
||||
|
||||
|
||||
## 2.0.0
|
||||
|
||||
|
@ -6,6 +6,9 @@
|
||||
- Исправлена передача аргументов командной строки скриптам
|
||||
- Исправлен `this` в нестатических методах классов
|
||||
|
||||
### Modules
|
||||
- [okhttp] Добавлен `okhttp.newClient()` и `HttpClientBuilderValue`
|
||||
|
||||
|
||||
## 2.0.0
|
||||
|
||||
|
@ -170,6 +170,10 @@ types:
|
||||
args: ''
|
||||
desc: returns RequestBuilderValue
|
||||
desc_ru: возвращает RequestBuilderValue
|
||||
- name: newClient
|
||||
args: ''
|
||||
desc: returns HttpClientBuilderValue
|
||||
desc_ru: возвращает HttpClientBuilderValue
|
||||
- name: HttpClientValue
|
||||
functions:
|
||||
- name: connectTimeoutMillis
|
||||
@ -208,3 +212,30 @@ types:
|
||||
args: ''
|
||||
desc: ''
|
||||
desc_ru: ''
|
||||
- name: HttpClientBuilderValue
|
||||
functions:
|
||||
- name: callTimeout
|
||||
args: 'duration, timeUnit'
|
||||
desc: 'Sets call timeout for `duration` and `timeUnit` one of "millis"/"milliseconds", "seconds", "minutes", "hours", "days"'
|
||||
desc_ru: 'Устанавливает таймаут вызова в `duration` и `timeUnit` один из "millis"/"milliseconds", "seconds", "minutes", "hours", "days"'
|
||||
- name: connectTimeout
|
||||
args: 'duration, timeUnit'
|
||||
desc: 'Sets connect timeout for `duration` and `timeUnit` one of "millis"/"milliseconds", "seconds", "minutes", "hours", "days"'
|
||||
desc_ru: 'Устанавливает таймаут соединения в `duration` и `timeUnit` один из "millis"/"milliseconds", "seconds", "minutes", "hours", "days"'
|
||||
- name: readTimeout
|
||||
args: 'duration, timeUnit'
|
||||
desc: 'Sets read timeout for `duration` and `timeUnit` one of "millis"/"milliseconds", "seconds", "minutes", "hours", "days"'
|
||||
desc_ru: 'Устанавливает таймаут чтения в `duration` и `timeUnit` один из "millis"/"milliseconds", "seconds", "minutes", "hours", "days"'
|
||||
- name: writeTimeout
|
||||
args: 'duration, timeUnit'
|
||||
desc: 'Sets write timeout for `duration` and `timeUnit` one of "millis"/"milliseconds", "seconds", "minutes", "hours", "days"'
|
||||
desc_ru: 'Устанавливает таймаут записи в `duration` и `timeUnit` один из "millis"/"milliseconds", "seconds", "minutes", "hours", "days"'
|
||||
- name: retryOnConnectionFailure
|
||||
args: 'flag'
|
||||
desc: 'Enables or disables retry on connection failure'
|
||||
desc_ru: 'Включает или выключает повтор при ошибках соединения'
|
||||
- name: build
|
||||
args: ''
|
||||
desc: 'Returns new HttpClientValue'
|
||||
desc_ru: 'Возвращает новый HttpClientValue'
|
||||
|
||||
|
@ -0,0 +1,52 @@
|
||||
package com.annimon.ownlang.modules.okhttp;
|
||||
|
||||
import com.annimon.ownlang.exceptions.OwnLangRuntimeException;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import okhttp3.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class HttpClientBuilderValue extends MapValue {
|
||||
|
||||
private final OkHttpClient.Builder builder;
|
||||
|
||||
public HttpClientBuilderValue(OkHttpClient.Builder builder) {
|
||||
super(6);
|
||||
this.builder = builder;
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
set("callTimeout", timeout(builder::callTimeout));
|
||||
set("connectTimeout", timeout(builder::connectTimeout));
|
||||
set("readTimeout", timeout(builder::readTimeout));
|
||||
set("writeTimeout", timeout(builder::writeTimeout));
|
||||
set("retryOnConnectionFailure", args -> {
|
||||
builder.retryOnConnectionFailure(args[0].asInt() != 0);
|
||||
return this;
|
||||
});
|
||||
set("build", args -> new HttpClientValue(builder.build()));
|
||||
}
|
||||
|
||||
private FunctionValue timeout(Timeout timeout) {
|
||||
return new FunctionValue(args -> {
|
||||
Arguments.check(2, args.length);
|
||||
long duration = args[0].type() == Types.NUMBER
|
||||
? ((NumberValue) args[0]).asLong()
|
||||
: args[0].asInt();
|
||||
TimeUnit unit = switch (args[1].asString().toLowerCase()) {
|
||||
case "millis", "milliseconds" -> TimeUnit.MILLISECONDS;
|
||||
case "seconds" -> TimeUnit.SECONDS;
|
||||
case "minutes" -> TimeUnit.MINUTES;
|
||||
case "hours" -> TimeUnit.HOURS;
|
||||
case "days" -> TimeUnit.DAYS;
|
||||
default -> throw new OwnLangRuntimeException("Unknown unit type");
|
||||
};
|
||||
timeout.timeout(duration, unit);
|
||||
return this;
|
||||
});
|
||||
}
|
||||
|
||||
interface Timeout {
|
||||
void timeout(long duration, TimeUnit unit);
|
||||
}
|
||||
}
|
@ -8,6 +8,7 @@ import okhttp3.Response;
|
||||
import okhttp3.WebSocket;
|
||||
import okhttp3.WebSocketListener;
|
||||
import okio.ByteString;
|
||||
import java.util.Objects;
|
||||
|
||||
public class HttpClientValue extends MapValue {
|
||||
|
||||
@ -117,6 +118,7 @@ public class HttpClientValue extends MapValue {
|
||||
}
|
||||
}
|
||||
});
|
||||
Objects.requireNonNull(ws);
|
||||
return new CallValue(client.newCall(request));
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,24 @@ public final class okhttp implements Module {
|
||||
|
||||
@Override
|
||||
public Map<String, Value> constants() {
|
||||
MapValue okhttp = new MapValue(3);
|
||||
okhttp.set("client", defaultClient);
|
||||
okhttp.set("request", args -> new RequestBuilderValue());
|
||||
okhttp.set("newClient", args -> newClientBuilder());
|
||||
|
||||
return Map.of(
|
||||
"RequestBody", requestBody(),
|
||||
"MultipartBody", multipartBody(),
|
||||
"okhttp", okhttp
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Function> functions() {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
private static MapValue requestBody() {
|
||||
MapValue requestBody = new MapValue(5);
|
||||
requestBody.set("bytes", args -> {
|
||||
Arguments.checkOrOr(2, 4, args.length);
|
||||
@ -52,8 +70,10 @@ public final class okhttp implements Module {
|
||||
args[1].asString()
|
||||
));
|
||||
});
|
||||
return requestBody;
|
||||
}
|
||||
|
||||
|
||||
private static MapValue multipartBody() {
|
||||
MapValue multipartBody = new MapValue(6);
|
||||
multipartBody.set("ALTERNATIVE", new StringValue(MultipartBody.ALTERNATIVE.toString()));
|
||||
multipartBody.set("DIGEST", new StringValue(MultipartBody.DIGEST.toString()));
|
||||
@ -61,21 +81,10 @@ public final class okhttp implements Module {
|
||||
multipartBody.set("MIXED", new StringValue(MultipartBody.MIXED.toString()));
|
||||
multipartBody.set("PARALLEL", new StringValue(MultipartBody.PARALLEL.toString()));
|
||||
multipartBody.set("builder", args -> new MultipartBodyBuilderValue());
|
||||
|
||||
|
||||
MapValue okhttp = new MapValue(3);
|
||||
okhttp.set("client", defaultClient);
|
||||
okhttp.set("request", args -> new RequestBuilderValue());
|
||||
|
||||
return Map.of(
|
||||
"RequestBody", requestBody,
|
||||
"MultipartBody", multipartBody,
|
||||
"okhttp", okhttp
|
||||
);
|
||||
return multipartBody;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Function> functions() {
|
||||
return Collections.emptyMap();
|
||||
private static HttpClientBuilderValue newClientBuilder() {
|
||||
return new HttpClientBuilderValue(new OkHttpClient.Builder());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user