blob: fa821059e6db45b9798d9f01f06d569a2b65b92f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import 'package:collection/collection.dart';
import 'package:equatable/equatable.dart';
import 'package:highlight/highlight_core.dart';
import 'package:highlight/languages/go.dart' as mode_go;
import 'package:highlight/languages/java.dart' as mode_java;
import 'package:highlight/languages/python.dart' as mode_python;
import 'package:highlight/languages/scala.dart' as mode_scala;
import 'package:json_annotation/json_annotation.dart';
part 'sdk.g.dart';
@JsonSerializable()
class Sdk with EquatableMixin {
final String id;
final String title;
const Sdk({
required this.id,
required this.title,
});
factory Sdk.parseOrCreate(String id) {
return tryParse(id) ?? Sdk(id: id, title: id);
}
static const java = Sdk(id: 'java', title: 'Java');
static const go = Sdk(id: 'go', title: 'Go');
static const python = Sdk(id: 'python', title: 'Python');
static const scio = Sdk(id: 'scio', title: 'SCIO');
static const known = [
java,
go,
python,
scio,
];
@override
List<Object> get props => [
id,
title,
];
/// The default file extension of the programming language.
String get fileExtension {
switch (id) {
case 'go':
return '.go';
case 'java':
return '.java';
case 'python':
return '.py';
case 'scio':
return '.scala';
}
throw Exception('Unknown SDK: $id');
}
/// A temporary solution while we wait for the backend to add
/// sdk in example responses.
static Sdk? tryParseExamplePath(String? path) {
if (path == null) {
return null;
}
if (path.startsWith('SDK_JAVA')) {
return java;
}
if (path.startsWith('SDK_GO')) {
return go;
}
if (path.startsWith('SDK_PYTHON')) {
return python;
}
if (path.startsWith('SDK_SCIO')) {
return scio;
}
return null;
}
static Sdk? tryParse(Object? value) {
if (value is! String) {
return null;
}
return known.firstWhereOrNull((e) => e.id == value);
}
static final _idToHighlightMode = <String, Mode>{
Sdk.java.id: mode_java.java,
Sdk.go.id: mode_go.go,
Sdk.python.id: mode_python.python,
Sdk.scio.id: mode_scala.scala,
};
Mode? get highlightMode => _idToHighlightMode[id];
factory Sdk.fromJson(Map<String, dynamic> json) => _$SdkFromJson(json);
Map<String, dynamic> toJson() => _$SdkToJson(this);
}