protected function getStructureType(string $structure, int $lvl) : array
    {
        $structureType = "";
        $dataType = "";


        if ($structure === "mixed" || $structure === "?mixed") {
            $structureType .= "nullable-";
            $structure = "mixed";
        } elseif (strpos($structure, "?") === 0) {
            $structureType .= "nullable-";
            $structure = substr($structure, 1, (strlen($structure) - 1));
        }


        if ($this->isStructureASingleType($structure) === true) {
            $structureType .= "type";
            $dataType = "type";
        } elseif ($this->isStructureAnCommomArray($structure) === true) {
            $structureType .= "array";

            // Remove os "[]"
            $structure = substr($structure, 1, (strlen($structure) - 2));
            if ($this->isStructureASingleType($structure) === true ||
                $this->isStructureAnArrayOfTypes($structure, $lvl) === true) {
                $dataType = "array-of-types";
            } elseif ($this->isStructureAnAssocArray($structure, $lvl) === true) {
                $dataType = "array-assoc";
            }
        }


        // Tratando-se de uma definição de um tipo
        if (($structureType === "type" || $structureType === "nullable-type") && $this->validateType($structure) === false) {
            $structureType = "";
            $dataType = "";
        }


        return [
            "structureType"     => $structureType,
            "dataType"          => $dataType,
            "internalStructure" => $structure
        ];
    }