public static Typ Of(MessageDescriptor desc)
        {
            if (s_wrapperTypes.TryGetValue(desc.FullName, out var wkt))
            {
                return(wkt);
            }
            var ns           = desc.File.CSharpNamespace();
            var isDeprecated = desc.IsDeprecated();
            var decls        = new List <MessageDescriptor>();

            do
            {
                decls.Add(desc);
                desc = desc.ContainingType;
            } while (desc != null);
            decls.Reverse();
            var typ = Manual(ns, decls[0].Name, isDeprecated: isDeprecated);

            foreach (var decl in decls.Skip(1))
            {
                typ = Nested(Nested(typ, "Types"), decl.Name);
            }
            return(typ);
        }