docs: @Nullable
    static SymbolOptions fromFeature(@NonNull Feature feature) {
      if (feature.geometry() == null) {
        throw new RuntimeException("geometry field is required");
      }
      if (!(feature.geometry() instanceof Point)) {
        return null;
      }
  
      SymbolOptions options = new SymbolOptions();
      options.geometry = (Point) feature.geometry();
      if (feature.hasProperty(PROPERTY_ICON_SIZE)) {
        options.iconSize = feature.getProperty(PROPERTY_ICON_SIZE).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_ICON_IMAGE)) {
        options.iconImage = feature.getProperty(PROPERTY_ICON_IMAGE).getAsString();
      }
      if (feature.hasProperty(PROPERTY_ICON_ROTATE)) {
        options.iconRotate = feature.getProperty(PROPERTY_ICON_ROTATE).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_ICON_OFFSET)) {
        options.iconOffset = toFloatArray(feature.getProperty(PROPERTY_ICON_OFFSET).getAsJsonArray());
      }
      if (feature.hasProperty(PROPERTY_ICON_ANCHOR)) {
        options.iconAnchor = feature.getProperty(PROPERTY_ICON_ANCHOR).getAsString();
      }
      if (feature.hasProperty(PROPERTY_TEXT_FIELD)) {
        options.textField = feature.getProperty(PROPERTY_TEXT_FIELD).getAsString();
      }
      if (feature.hasProperty(PROPERTY_TEXT_FONT)) {
        options.textFont = toStringArray(feature.getProperty(PROPERTY_TEXT_FONT).getAsJsonArray());
      }
      if (feature.hasProperty(PROPERTY_TEXT_SIZE)) {
        options.textSize = feature.getProperty(PROPERTY_TEXT_SIZE).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_TEXT_MAX_WIDTH)) {
        options.textMaxWidth = feature.getProperty(PROPERTY_TEXT_MAX_WIDTH).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_TEXT_LETTER_SPACING)) {
        options.textLetterSpacing = feature.getProperty(PROPERTY_TEXT_LETTER_SPACING).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_TEXT_JUSTIFY)) {
        options.textJustify = feature.getProperty(PROPERTY_TEXT_JUSTIFY).getAsString();
      }
      if (feature.hasProperty(PROPERTY_TEXT_ANCHOR)) {
        options.textAnchor = feature.getProperty(PROPERTY_TEXT_ANCHOR).getAsString();
      }
      if (feature.hasProperty(PROPERTY_TEXT_ROTATE)) {
        options.textRotate = feature.getProperty(PROPERTY_TEXT_ROTATE).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_TEXT_TRANSFORM)) {
        options.textTransform = feature.getProperty(PROPERTY_TEXT_TRANSFORM).getAsString();
      }
      if (feature.hasProperty(PROPERTY_TEXT_OFFSET)) {
        options.textOffset = toFloatArray(feature.getProperty(PROPERTY_TEXT_OFFSET).getAsJsonArray());
      }
      if (feature.hasProperty(PROPERTY_ICON_OPACITY)) {
        options.iconOpacity = feature.getProperty(PROPERTY_ICON_OPACITY).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_ICON_COLOR)) {
        options.iconColor = feature.getProperty(PROPERTY_ICON_COLOR).getAsString();
      }
      if (feature.hasProperty(PROPERTY_ICON_HALO_COLOR)) {
        options.iconHaloColor = feature.getProperty(PROPERTY_ICON_HALO_COLOR).getAsString();
      }
      if (feature.hasProperty(PROPERTY_ICON_HALO_WIDTH)) {
        options.iconHaloWidth = feature.getProperty(PROPERTY_ICON_HALO_WIDTH).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_ICON_HALO_BLUR)) {
        options.iconHaloBlur = feature.getProperty(PROPERTY_ICON_HALO_BLUR).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_TEXT_OPACITY)) {
        options.textOpacity = feature.getProperty(PROPERTY_TEXT_OPACITY).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_TEXT_COLOR)) {
        options.textColor = feature.getProperty(PROPERTY_TEXT_COLOR).getAsString();
      }
      if (feature.hasProperty(PROPERTY_TEXT_HALO_COLOR)) {
        options.textHaloColor = feature.getProperty(PROPERTY_TEXT_HALO_COLOR).getAsString();
      }
      if (feature.hasProperty(PROPERTY_TEXT_HALO_WIDTH)) {
        options.textHaloWidth = feature.getProperty(PROPERTY_TEXT_HALO_WIDTH).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_TEXT_HALO_BLUR)) {
        options.textHaloBlur = feature.getProperty(PROPERTY_TEXT_HALO_BLUR).getAsFloat();
      }
      if (feature.hasProperty(PROPERTY_Z_INDEX)) {
        options.zIndex = feature.getProperty(PROPERTY_Z_INDEX).getAsInt();
      }
      if (feature.hasProperty(PROPERTY_IS_DRAGGABLE)) {
        options.isDraggable = feature.getProperty(PROPERTY_IS_DRAGGABLE).getAsBoolean();
      }
      return options;
    }