Improved typing
This commit is contained in:
@@ -3,6 +3,7 @@ package dev.selimaj.session;
|
|||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
|
||||||
import dev.selimaj.session.types.Message;
|
import dev.selimaj.session.types.Message;
|
||||||
|
import dev.selimaj.session.types.Method;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.http.HttpClient;
|
import java.net.http.HttpClient;
|
||||||
@@ -46,11 +47,10 @@ public final class Session {
|
|||||||
listener.notify(ws, method, data);
|
listener.notify(ws, method, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <Req, Res> CompletableFuture<Res> request(
|
<Req extends JsonNode, Res extends JsonNode, Err extends JsonNode> CompletableFuture<Res> request(
|
||||||
String method,
|
Class<? extends Method<Req, Res, Err>> method, Req req) throws Exception {
|
||||||
Req data,
|
Method<Req, Res, Err> m = method.getDeclaredConstructor().newInstance();
|
||||||
Class<Res> resType) throws Exception {
|
return listener.request(ws, m.getName(), req, m.getResClass());
|
||||||
return listener.request(ws, method, data, resType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() throws Exception {
|
public void close() throws Exception {
|
||||||
|
|||||||
@@ -2,6 +2,32 @@ package dev.selimaj.session.types;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
|
||||||
public interface Method<Req extends JsonNode, Res extends JsonNode, Err extends JsonNode> {
|
public class Method<Req extends JsonNode, Res extends JsonNode, Err extends JsonNode> {
|
||||||
String getName();
|
private final String name;
|
||||||
|
private final Class<Req> reqClass;
|
||||||
|
private final Class<Res> resClass;
|
||||||
|
private final Class<Err> errClass;
|
||||||
|
|
||||||
|
protected Method(String name, Class<Req> reqClass, Class<Res> resClass, Class<Err> errClass) {
|
||||||
|
this.name = name;
|
||||||
|
this.reqClass = reqClass;
|
||||||
|
this.resClass = resClass;
|
||||||
|
this.errClass = errClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<Req> getReqClass() {
|
||||||
|
return reqClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<Res> getResClass() {
|
||||||
|
return resClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<Err> getErrClass() {
|
||||||
|
return errClass;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -5,14 +5,9 @@ import com.fasterxml.jackson.databind.node.TextNode;
|
|||||||
import dev.selimaj.session.types.Method;
|
import dev.selimaj.session.types.Method;
|
||||||
|
|
||||||
public class Methods {
|
public class Methods {
|
||||||
public static class Data implements Method<TextNode, TextNode, TextNode> {
|
public static class Data extends Method<TextNode, TextNode, TextNode> {
|
||||||
@Override
|
Data() {
|
||||||
public String getName() {
|
super("data", TextNode.class, TextNode.class, TextNode.class);
|
||||||
return "data";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getNameStatic() {
|
|
||||||
return "data";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,15 +2,19 @@ package dev.selimaj.session;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.node.TextNode;
|
||||||
|
|
||||||
public class SessionTest {
|
public class SessionTest {
|
||||||
static void testRequest() throws Exception {
|
static void testRequest() throws Exception {
|
||||||
Session session = Session.connect("ws://localhost:8080/");
|
Session session = Session.connect("ws://localhost:8080/");
|
||||||
|
|
||||||
String response = session.request(Methods.Data.getNameStatic(), "Hello from client", String.class).get();
|
TextNode response = session.request(Methods.Data.class, TextNode.valueOf("Hello from client")).get();
|
||||||
|
|
||||||
System.out.println(response);
|
System.out.println(response);
|
||||||
|
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
|
|
||||||
|
session.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user