///|
/// Extract declared fields only. No geometry oracle uses production evaluators.
fn main {
  let args = @env.args()
  let bytes = @fs.read_file_to_bytes(args[1]) catch { _ => return }
  let drawing = @dxfkit.build_drawing(@dxfkit.scan_tags(bytes))
  for e in drawing.entities().entities {
    let h = e.common.handle
    match e.geom {
      @dxfkit.Line(start~, end~) =>
        println(
          "LINE|\{h}|\{start.x}|\{start.y}|\{start.z}|\{end.x}|\{end.y}|\{end.z}",
        )
      @dxfkit.Circle(center~, radius~) =>
        println("CIRCLE|\{h}|\{center.x}|\{center.y}|\{center.z}|\{radius}")
      @dxfkit.Arc(center~, radius~, start_angle~, end_angle~) =>
        println(
          "ARC|\{h}|\{center.x}|\{center.y}|\{center.z}|\{radius}|\{start_angle}|\{end_angle}",
        )
      @dxfkit.Ellipse(center~, major~, ratio~, start_param~, end_param~) =>
        println(
          "ELLIPSE|\{h}|\{center.x}|\{center.y}|\{center.z}|\{major.x}|\{major.y}|\{major.z}|\{ratio}|\{start_param}|\{end_param}",
        )
      @dxfkit.Insert(at~, block~, scale~, rotation~) =>
        println(
          "INSERT|\{h}|\{block}|\{at.x}|\{at.y}|\{at.z}|\{scale.x}|\{scale.y}|\{scale.z}|\{rotation}",
        )
      @dxfkit.Polyline(vertices~, closed~) if e.kind() == "LWPOLYLINE" => {
        println("LWPOLYLINE|\{h}|\{closed}|\{vertices.length()}")
        for v in vertices {
          println("VERTEX|\{h}|\{v.at.x}|\{v.at.y}|\{v.bulge}")
        }
      }
      _ => ()
    }
  }
}