Migrate struct() to skylarkbuildapi

RELNOTES: None.
PiperOrigin-RevId: 197915097
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index debf9f5..13d1997 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -35,7 +35,6 @@
 import com.google.devtools.build.lib.packages.BuildType;
 import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
 import com.google.devtools.build.lib.packages.Info;
-import com.google.devtools.build.lib.packages.NativeProvider;
 import com.google.devtools.build.lib.packages.PredicateWithMessage;
 import com.google.devtools.build.lib.packages.RequiredProviders;
 import com.google.devtools.build.lib.packages.RuleClass;
@@ -45,6 +44,7 @@
 import com.google.devtools.build.lib.packages.SkylarkInfo;
 import com.google.devtools.build.lib.packages.SkylarkProvider;
 import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
+import com.google.devtools.build.lib.packages.StructProvider;
 import com.google.devtools.build.lib.rules.cpp.transitions.DisableLipoTransition;
 import com.google.devtools.build.lib.skyframe.SkylarkImportLookupFunction;
 import com.google.devtools.build.lib.skylark.util.SkylarkTestCase;
@@ -1180,17 +1180,17 @@
   }
 
   private static Info makeStruct(String field, Object value) {
-    return NativeProvider.STRUCT.create(ImmutableMap.of(field, value), "no field '%'");
+    return StructProvider.STRUCT.create(ImmutableMap.of(field, value), "no field '%'");
   }
 
   private static Info makeBigStruct(Environment env) {
     // struct(a=[struct(x={1:1}), ()], b=(), c={2:2})
-    return NativeProvider.STRUCT.create(
+    return StructProvider.STRUCT.create(
         ImmutableMap.<String, Object>of(
             "a",
                 MutableList.<Object>of(
                     env,
-                    NativeProvider.STRUCT.create(
+                    StructProvider.STRUCT.create(
                         ImmutableMap.<String, Object>of(
                             "x", SkylarkDict.<Object, Object>of(env, 1, 1)),
                         "no field '%s'"),
@@ -1311,9 +1311,9 @@
         "data = struct(x = 1)"
     );
     Info data = (Info) lookup("data");
-    assertThat(NativeProvider.STRUCT.isExported()).isTrue();
-    assertThat(data.getProvider()).isEqualTo(NativeProvider.STRUCT);
-    assertThat(data.getProvider().getKey()).isEqualTo(NativeProvider.STRUCT.getKey());
+    assertThat(StructProvider.STRUCT.isExported()).isTrue();
+    assertThat(data.getProvider()).isEqualTo(StructProvider.STRUCT);
+    assertThat(data.getProvider().getKey()).isEqualTo(StructProvider.STRUCT.getKey());
   }
 
   @Test
@@ -1656,4 +1656,12 @@
     assertThat(params.get(0)).isEqualTo("NoneType");
     assertThat(params.get(1)).isEqualTo("NoneType");
   }
+
+  @Test
+  public void testTypeOfStruct() throws Exception {
+    eval("p = type(struct)", "s = type(struct())");
+
+    assertThat(lookup("p")).isEqualTo("Provider");
+    assertThat(lookup("s")).isEqualTo("struct");
+  }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java
index a34eab2..4c1810a 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EvalUtilsTest.java
@@ -21,7 +21,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.packages.NativeProvider;
+import com.google.devtools.build.lib.packages.StructProvider;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
@@ -129,7 +129,7 @@
       SkylarkDict.of(env, "key", 123),
       SkylarkDict.of(env, 123, "value"),
       NestedSetBuilder.stableOrder().add(1).add(2).add(3).build(),
-      NativeProvider.STRUCT.create(ImmutableMap.of("key", (Object) "value"), "no field %s"),
+      StructProvider.STRUCT.create(ImmutableMap.of("key", (Object) "value"), "no field %s"),
     };
 
     for (int i = 0; i < objects.length; ++i) {
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
index 3e0db3d..422ac03 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
@@ -24,6 +24,7 @@
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.packages.NativeInfo;
 import com.google.devtools.build.lib.packages.NativeProvider;
+import com.google.devtools.build.lib.packages.StructProvider;
 import com.google.devtools.build.lib.skylarkinterface.Param;
 import com.google.devtools.build.lib.skylarkinterface.ParamType;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
@@ -385,7 +386,7 @@
         builder.put(nativeFunction,
             FuncallExpression.getBuiltinCallable(this, nativeFunction));
       }
-      return NativeProvider.STRUCT.create(builder.build(), "no native callable '%s'");
+      return StructProvider.STRUCT.create(builder.build(), "no native callable '%s'");
     }
 
     @SkylarkCallable(