// Copyright 2025 International Digital Economy Academy
//
// Licensed 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.
///|
pub struct Point[T] {
x : T
y : T
}
///|
pub fn[T] Point::new(x~ : T, y~ : T) -> Point[T] {
Point::{ x, y }
}
///|
pub fn Point::zero() -> Point[Double] {
Point::{ x: 0.0, y: 0.0 }
}
///|
pub struct Size[T] {
width : T
height : T
}
///|
pub fn[T] Size::new(width~ : T, height~ : T) -> Size[T] {
Size::{ width, height }
}
///|
pub fn Size::zero() -> Size[Double] {
Size::{ width: 0.0, height: 0.0 }
}
///|
pub struct Rect[T] {
left : T
right : T
top : T
bottom : T
}
///|
pub fn[T] Rect::new(left~ : T, right~ : T, top~ : T, bottom~ : T) -> Rect[T] {
Rect::{ left, right, top, bottom }
}
///|
pub struct Line[T] {
start : T
end : T
}
///|
pub fn[T] Line::new(start~ : T, end~ : T) -> Line[T] {
Line::{ start, end }
}