// Path: trpc-core/src/main/java/com/github/sofn/trpc/core/utils/JsonUtils.java
// @Slf4j
// public class JsonUtils {
//     private static ObjectMapper mapper;
// 
//     static {
//         mapper = new ObjectMapper();
//         //设置输入时忽略在JSON字符串中存在但Java对象实际没有的属性
//         mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
//     }
// 
//     /**
//      * Object可以是POJO，也可以是Collection或数组。
//      * 如果对象为Null, 返回"null".
//      * 如果集合为空集合, 返回"[]".
//      */
//     public static String toJson(Object object) {
// 
//         try {
//             return mapper.writeValueAsString(object);
//         } catch (IOException e) {
//             log.warn("write to json string error:" + object, e);
//             return null;
//         }
//     }
// 
//     /**
//      * 反序列化POJO或简单Collection如List<String>.
//      * <p>
//      * 如果JSON字符串为Null或"null"字符串, 返回Null.
//      * 如果JSON字符串为"[]", 返回空集合.
//      * <p>
//      * 如需反序列化复杂Collection如List<MyBean>, 请使用fromJson(String, JavaType)
//      */
//     public static <T> T fromJson(String jsonString, Class<T> clazz) {
//         if (StringUtils.isEmpty(jsonString)) {
//             return null;
//         }
// 
//         try {
//             return mapper.readValue(jsonString, clazz);
//         } catch (IOException e) {
//             log.warn("parse json string error:" + jsonString, e);
//             return null;
//         }
//     }
// }


import com.github.sofn.trpc.core.utils.JsonUtils;
import lombok.*;
import java.util.Collections;
import java.util.List;
public class RegistryConfig extends AbstractConfig {
    @Singular
    private List<ServiceConfig> servers = Collections.emptyList();
    private ThriftServerInfo serverInfo;
    private String appKey;
    private String registry;
    private String hostName;
    private int weight; //权重

    public RegistryConfig() {
        super("registry");
    }

    public RegistryConfig(List<ServiceConfig> servers, ThriftServerInfo serverInfo, String appKey, String registry, String hostName, int weight) {
        this();
        this.servers = servers;
        this.serverInfo = serverInfo;
        this.appKey = appKey;
        this.registry = registry;
        this.hostName = hostName;
        this.weight = weight;
    }

    public String toJsonString() {
        this.servers.stream().forEach(AbstractConfig::fillId);
        this.fillId();
        return JsonUtils.toJson(this);
    }

    public static RegistryConfig parse(String json) {
// Path: trpc-core/src/main/java/com/github/sofn/trpc/core/utils/JsonUtils.java
// @Slf4j
// public class JsonUtils {
//     private static ObjectMapper mapper;
// 
//     static {
//         mapper = new ObjectMapper();
//         //设置输入时忽略在JSON字符串中存在但Java对象实际没有的属性
//         mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
//     }
// 
//     /**
//      * Object可以是POJO，也可以是Collection或数组。
//      * 如果对象为Null, 返回"null".
//      * 如果集合为空集合, 返回"[]".
//      */
//     public static String toJson(Object object) {
// 
//         try {
//             return mapper.writeValueAsString(object);
//         } catch (IOException e) {
//             log.warn("write to json string error:" + object, e);
//             return null;
//         }
//     }
// 
//     /**
//      * 反序列化POJO或简单Collection如List<String>.
//      * <p>
//      * 如果JSON字符串为Null或"null"字符串, 返回Null.
//      * 如果JSON字符串为"[]", 返回空集合.
//      * <p>
//      * 如需反序列化复杂Collection如List<MyBean>, 请使用fromJson(String, JavaType)
//      */
//     public static <T> T fromJson(String jsonString, Class<T> clazz) {
//         if (StringUtils.isEmpty(jsonString)) {
//             return null;
//         }
// 
//         try {
//             return mapper.readValue(jsonString, clazz);
//         } catch (IOException e) {
//             log.warn("parse json string error:" + jsonString, e);
//             return null;
//         }
//     }
// }


// Path: trpc-core/src/main/java/com/github/sofn/trpc/core/config/RegistryConfig.java
import com.github.sofn.trpc.core.utils.JsonUtils;
import lombok.*;
import java.util.Collections;
import java.util.List;

public class RegistryConfig extends AbstractConfig {
    @Singular
    private List<ServiceConfig> servers = Collections.emptyList();
    private ThriftServerInfo serverInfo;
    private String appKey;
    private String registry;
    private String hostName;
    private int weight; //权重

    public RegistryConfig() {
        super("registry");
    }

    public RegistryConfig(List<ServiceConfig> servers, ThriftServerInfo serverInfo, String appKey, String registry, String hostName, int weight) {
        this();
        this.servers = servers;
        this.serverInfo = serverInfo;
        this.appKey = appKey;
        this.registry = registry;
        this.hostName = hostName;
        this.weight = weight;
    }

    public String toJsonString() {
        this.servers.stream().forEach(AbstractConfig::fillId);
        this.fillId();
        return JsonUtils.toJson(this);
    }

    public static RegistryConfig parse(String json) {
        return JsonUtils.fromJson(json, RegistryConfig.class);