// Path: j1st-mqtt-api/src/main/java/io/netty/handler/codec/mqtt/MqttGrantedQoS.java
// public enum MqttGrantedQoS {
//     SUCCESS_MAX_QOS0(0),
//     SUCCESS_MAX_QOS1(1),
//     SUCCESS_MAX_QOS2(2),
//     FAILURE(0x80);
// 
//     private final int value;
// 
//     MqttGrantedQoS(int value) {
//         this.value = value;
//     }
// 
//     public static MqttGrantedQoS valueOf(int value) {
//         for (MqttGrantedQoS r : values()) {
//             if (r.value == value) {
//                 return r;
//             }
//         }
//         throw new IllegalArgumentException("invalid granted QoS: " + value);
//     }
// 
//     public int value() {
//         return value;
//     }
// }
// 
// Path: j1st-mqtt-api/src/main/java/io/netty/handler/codec/mqtt/MqttTopicSubscription.java
// public class MqttTopicSubscription {
// 
//     protected String topic;
//     protected MqttQoS requestedQos;
// 
//     public MqttTopicSubscription(String topic, MqttQoS requestedQos) {
//         this.topic = topic;
//         this.requestedQos = requestedQos;
//     }
// 
//     public String topic() {
//         return topic;
//     }
// 
//     public MqttQoS requestedQos() {
//         return requestedQos;
//     }
// 
//     @Override
//     public String toString() {
//         return StringUtil.simpleClassName(this)
//                 + '['
//                 + "topic=" + topic
//                 + ", requestedQos=" + requestedQos
//                 + ']';
//     }
// }


import io.netty.handler.codec.mqtt.MqttGrantedQoS;
import io.netty.handler.codec.mqtt.MqttTopicSubscription;
import org.apache.commons.configuration.AbstractConfiguration;
import java.util.List;
package com.github.j1stiot.mqtt.api.auth;



/**
 * Authenticator
 */
@SuppressWarnings("unused")
public interface Authenticator {

    /**
     * Init the authenticator
     *
     * @param config Authenticator Configuration
     */
    void init(AbstractConfiguration config);

    /**
     * Destroy the authenticator
     */
    void destroy();

    /**
     * Authorize client CONNECT
     *
     * @param clientId Client Id
     * @param userName User Name
     * @param password Password
     * @return Authorize Result
     */
// Path: j1st-mqtt-api/src/main/java/io/netty/handler/codec/mqtt/MqttGrantedQoS.java
// public enum MqttGrantedQoS {
//     SUCCESS_MAX_QOS0(0),
//     SUCCESS_MAX_QOS1(1),
//     SUCCESS_MAX_QOS2(2),
//     FAILURE(0x80);
// 
//     private final int value;
// 
//     MqttGrantedQoS(int value) {
//         this.value = value;
//     }
// 
//     public static MqttGrantedQoS valueOf(int value) {
//         for (MqttGrantedQoS r : values()) {
//             if (r.value == value) {
//                 return r;
//             }
//         }
//         throw new IllegalArgumentException("invalid granted QoS: " + value);
//     }
// 
//     public int value() {
//         return value;
//     }
// }
// 
// Path: j1st-mqtt-api/src/main/java/io/netty/handler/codec/mqtt/MqttTopicSubscription.java
// public class MqttTopicSubscription {
// 
//     protected String topic;
//     protected MqttQoS requestedQos;
// 
//     public MqttTopicSubscription(String topic, MqttQoS requestedQos) {
//         this.topic = topic;
//         this.requestedQos = requestedQos;
//     }
// 
//     public String topic() {
//         return topic;
//     }
// 
//     public MqttQoS requestedQos() {
//         return requestedQos;
//     }
// 
//     @Override
//     public String toString() {
//         return StringUtil.simpleClassName(this)
//                 + '['
//                 + "topic=" + topic
//                 + ", requestedQos=" + requestedQos
//                 + ']';
//     }
// }


// Path: j1st-mqtt-api/src/main/java/com/github/j1stiot/mqtt/api/auth/Authenticator.java
import io.netty.handler.codec.mqtt.MqttGrantedQoS;
import io.netty.handler.codec.mqtt.MqttTopicSubscription;
import org.apache.commons.configuration.AbstractConfiguration;
import java.util.List;

package com.github.j1stiot.mqtt.api.auth;



/**
 * Authenticator
 */
@SuppressWarnings("unused")
public interface Authenticator {

    /**
     * Init the authenticator
     *
     * @param config Authenticator Configuration
     */
    void init(AbstractConfiguration config);

    /**
     * Destroy the authenticator
     */
    void destroy();

    /**
     * Authorize client CONNECT
     *
     * @param clientId Client Id
     * @param userName User Name
     * @param password Password
     * @return Authorize Result
     */
    AuthorizeResult authConnect(String clientId, String userName, String password);