// Path: jrand-core/src/main/java/me/xdrop/jrand/Generator.java
// public abstract class Generator<T> {
// 
//     private Rand randGen;
// 
//     public Generator() {
//         this.randGen = new Rand();
//     }
// 
//     public Rand random() {
//         return this.randGen;
//     }
// 
//     public abstract T gen();
// 
//     public String repeat(int times) {
//         StringBuilder sb = new StringBuilder();
//         while (times-- > 0) {
//             sb.append(gen());
//         }
//         return sb.toString();
//     }
// 
//     public String genString() {
//         return gen().toString();
//     }
// 
//     public List<T> genMany(int num) {
//         List<T> many = new ArrayList<>();
//         for (int n = 0; n < num; n++) {
//             many.add(gen());
//         }
//         return many;
//     }
// 
//     public List<T> genManyUnique(int num) {
//         List<T> many = new LinkedList<>();
//         Set<T> present = new HashSet<>();
// 
// 
//         for (int n = 0; n < num; n++) {
//             T gen;
//             do {
//                 gen = gen();
//             } while (present.contains(gen));
//             many.add(gen);
//             present.add(gen);
//         }
// 
//         return many;
//     }
// 
//     public Set<T> genManyAsSet(int num) {
//         List<T> many = new LinkedList<>();
//         for (int n = 0; n < num; n++) {
//             many.add(gen());
//         }
//         return new HashSet<>(many);
//     }
// 
// }
// 
// Path: jrand-core/src/main/java/me/xdrop/jrand/model/basics/enums/CHARSET.java
// public enum CHARSET {
// 
//     CHARS_LOWER(alphaLowerPoolChar),
//     CHARS_UPPER(alphaUpperPoolChar),
//     NUMBERS(numericPoolChar),
//     SYMBOLS(symbolsPoolChar);
// 
//     char[] charset;
// 
//     CHARSET(char[] set) {
//         this.charset = set;
//     }
// 
//     public char[] getCharset(){
//         return this.charset;
//     }
// 
// }


import me.xdrop.jrand.Generator;
import me.xdrop.jrand.annotation.Facade;
import me.xdrop.jrand.model.basics.enums.CHARSET;
    public StringGenerator addDigits() {
        charGen.addDigits();
        return this;
    }

    /**
     * Add letters to the pool of elements this generator
     * will return
     * @return The same generator
     */
    public StringGenerator addAlpha() {
        charGen.addAlpha();
        return this;
    }

    /**
     * Add symbols to the pool of elements this generator
     * will return
     * @return The same generator
     */
    public StringGenerator addSymbols() {
        charGen.addSymbols();
        return this;
    }

    /**
     * Add a charset to the pool
     * @param charset The charset to add
     * @return The same generator
     */
// Path: jrand-core/src/main/java/me/xdrop/jrand/Generator.java
// public abstract class Generator<T> {
// 
//     private Rand randGen;
// 
//     public Generator() {
//         this.randGen = new Rand();
//     }
// 
//     public Rand random() {
//         return this.randGen;
//     }
// 
//     public abstract T gen();
// 
//     public String repeat(int times) {
//         StringBuilder sb = new StringBuilder();
//         while (times-- > 0) {
//             sb.append(gen());
//         }
//         return sb.toString();
//     }
// 
//     public String genString() {
//         return gen().toString();
//     }
// 
//     public List<T> genMany(int num) {
//         List<T> many = new ArrayList<>();
//         for (int n = 0; n < num; n++) {
//             many.add(gen());
//         }
//         return many;
//     }
// 
//     public List<T> genManyUnique(int num) {
//         List<T> many = new LinkedList<>();
//         Set<T> present = new HashSet<>();
// 
// 
//         for (int n = 0; n < num; n++) {
//             T gen;
//             do {
//                 gen = gen();
//             } while (present.contains(gen));
//             many.add(gen);
//             present.add(gen);
//         }
// 
//         return many;
//     }
// 
//     public Set<T> genManyAsSet(int num) {
//         List<T> many = new LinkedList<>();
//         for (int n = 0; n < num; n++) {
//             many.add(gen());
//         }
//         return new HashSet<>(many);
//     }
// 
// }
// 
// Path: jrand-core/src/main/java/me/xdrop/jrand/model/basics/enums/CHARSET.java
// public enum CHARSET {
// 
//     CHARS_LOWER(alphaLowerPoolChar),
//     CHARS_UPPER(alphaUpperPoolChar),
//     NUMBERS(numericPoolChar),
//     SYMBOLS(symbolsPoolChar);
// 
//     char[] charset;
// 
//     CHARSET(char[] set) {
//         this.charset = set;
//     }
// 
//     public char[] getCharset(){
//         return this.charset;
//     }
// 
// }


// Path: jrand-core/src/main/java/me/xdrop/jrand/generators/basics/StringGenerator.java
import me.xdrop.jrand.Generator;
import me.xdrop.jrand.annotation.Facade;
import me.xdrop.jrand.model.basics.enums.CHARSET;

    public StringGenerator addDigits() {
        charGen.addDigits();
        return this;
    }

    /**
     * Add letters to the pool of elements this generator
     * will return
     * @return The same generator
     */
    public StringGenerator addAlpha() {
        charGen.addAlpha();
        return this;
    }

    /**
     * Add symbols to the pool of elements this generator
     * will return
     * @return The same generator
     */
    public StringGenerator addSymbols() {
        charGen.addSymbols();
        return this;
    }

    /**
     * Add a charset to the pool
     * @param charset The charset to add
     * @return The same generator
     */
    public StringGenerator addCharset(CHARSET charset) {