Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
afb8ea3fc4
|
||
|
|
0404252fa0
|
@@ -18,6 +18,15 @@ jobs:
|
|||||||
- name: Hent koden
|
- name: Hent koden
|
||||||
uses: https://gitea.com/actions/checkout@v6
|
uses: https://gitea.com/actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Sørg for en Rust-verktøykjede
|
||||||
|
run: |
|
||||||
|
# Kjørebrukeren har rustup, men ingen standardkjede er satt. Uten dette svarer
|
||||||
|
# cargo med at den ikke vet hvilken versjon den skal bruke.
|
||||||
|
if not cargo --version >/dev/null 2>&1
|
||||||
|
rustup default stable
|
||||||
|
end
|
||||||
|
cargo --version
|
||||||
|
|
||||||
- name: Bygg enok
|
- name: Bygg enok
|
||||||
run: cargo build --release --locked
|
run: cargo build --release --locked
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,15 @@ jobs:
|
|||||||
- name: Hent koden
|
- name: Hent koden
|
||||||
uses: https://gitea.com/actions/checkout@v6
|
uses: https://gitea.com/actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Sørg for en Rust-verktøykjede
|
||||||
|
run: |
|
||||||
|
# Kjørebrukeren har rustup, men ingen standardkjede er satt. Uten dette svarer
|
||||||
|
# cargo med at den ikke vet hvilken versjon den skal bruke.
|
||||||
|
if not cargo --version >/dev/null 2>&1
|
||||||
|
rustup default stable
|
||||||
|
end
|
||||||
|
cargo --version
|
||||||
|
|
||||||
- name: Bygg
|
- name: Bygg
|
||||||
run: cargo build --release --locked
|
run: cargo build --release --locked
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,15 @@ jobs:
|
|||||||
- name: Hent koden
|
- name: Hent koden
|
||||||
uses: https://gitea.com/actions/checkout@v6
|
uses: https://gitea.com/actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Sørg for en Rust-verktøykjede
|
||||||
|
run: |
|
||||||
|
# Kjørebrukeren har rustup, men ingen standardkjede er satt. Uten dette svarer
|
||||||
|
# cargo med at den ikke vet hvilken versjon den skal bruke.
|
||||||
|
if not cargo --version >/dev/null 2>&1
|
||||||
|
rustup default stable
|
||||||
|
end
|
||||||
|
cargo --version
|
||||||
|
|
||||||
- name: Formatering
|
- name: Formatering
|
||||||
run: cargo fmt --check
|
run: cargo fmt --check
|
||||||
|
|
||||||
|
|||||||
Generated
+1
-1
@@ -222,7 +222,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "enok"
|
name = "enok"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"approx",
|
"approx",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "enok"
|
name = "enok"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Årlig energiberegning og energirapport for boliger etter NS 3031 (timesmetode, ISO 52016-1)"
|
description = "Årlig energiberegning og energirapport for boliger etter NS 3031 (timesmetode, ISO 52016-1)"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|||||||
@@ -231,8 +231,11 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
TOKEN: ${{ github.token }}
|
TOKEN: ${{ github.token }}
|
||||||
run: |
|
run: |
|
||||||
curl -sL -o enok --header "Authorization: token $TOKEN" \
|
# Gitea har ingen «latest/download»-sti, så taggen slås opp først.
|
||||||
"$GITHUB_SERVER_URL/klingenbergbygg/enok/releases/latest/download/enok"
|
set TAG (curl -sS --fail --header "Authorization: token $TOKEN" \
|
||||||
|
"$GITHUB_SERVER_URL/api/v1/repos/klingenbergbygg/enok/releases/latest" | jq -r '.tag_name')
|
||||||
|
curl -sSL --fail -o enok --header "Authorization: token $TOKEN" \
|
||||||
|
"$GITHUB_SERVER_URL/klingenbergbygg/enok/releases/download/$TAG/enok"
|
||||||
chmod +x enok
|
chmod +x enok
|
||||||
./enok beregn bygning.toml --ut dist
|
./enok beregn bygning.toml --ut dist
|
||||||
```
|
```
|
||||||
|
|||||||
+3
-1
@@ -105,7 +105,9 @@ impl Resultat {
|
|||||||
pub fn hent_klima(b: &Bygning) -> Result<(Vaerdata, String, bool)> {
|
pub fn hent_klima(b: &Bygning) -> Result<(Vaerdata, String, bool)> {
|
||||||
if let Some(sti) = &b.klima.epw {
|
if let Some(sti) = &b.klima.epw {
|
||||||
let v = Vaerdata::fra_fil(sti)?;
|
let v = Vaerdata::fra_fil(sti)?;
|
||||||
let navn = v.sted.clone();
|
// Er kommunen oppgitt, gjelder den for oppslaget av klimakorrigeringsfaktoren.
|
||||||
|
// Da er navnet uavhengig av hvordan stedsnavnet er skrevet inne i klimafilen.
|
||||||
|
let navn = b.klima.kommune.clone().unwrap_or_else(|| v.sted.clone());
|
||||||
let er_referanse = crate::data::normaliser_stedsnavn(&navn)
|
let er_referanse = crate::data::normaliser_stedsnavn(&navn)
|
||||||
== crate::data::normaliser_stedsnavn(REFERANSEKLIMA);
|
== crate::data::normaliser_stedsnavn(REFERANSEKLIMA);
|
||||||
return Ok((v, navn, er_referanse));
|
return Ok((v, navn, er_referanse));
|
||||||
|
|||||||
@@ -9,6 +9,19 @@ use crate::{Result, TIMER};
|
|||||||
use anyhow::{bail, Context};
|
use anyhow::{bail, Context};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
|
/// Gjør bytene i en EPW-fil om til tekst.
|
||||||
|
///
|
||||||
|
/// EPW-filer er ikke UTF-8. Stedsnavn skrives i Latin-1, så «Indre Østfold» kommer som
|
||||||
|
/// byten 0xD8 der Ø skal stå. Tolket som UTF-8 blir navnet ødelagt, og da slår ikke
|
||||||
|
/// klimakorrigeringsfaktoren til, siden den slås opp på stedsnavnet. Filen leses derfor
|
||||||
|
/// som UTF-8 når den er gyldig UTF-8, og ellers som Latin-1.
|
||||||
|
pub fn avkod(bytes: &[u8]) -> String {
|
||||||
|
match std::str::from_utf8(bytes) {
|
||||||
|
Ok(s) => s.to_string(),
|
||||||
|
Err(_) => bytes.iter().map(|b| *b as char).collect(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Vaerdata {
|
pub struct Vaerdata {
|
||||||
pub sted: String,
|
pub sted: String,
|
||||||
@@ -134,3 +147,22 @@ impl Vaerdata {
|
|||||||
.sum()
|
.sum()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tester {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn latin1_stedsnavn_leses_riktig() {
|
||||||
|
// «Indre Østfold» der Ø er Latin-1-byten 0xD8.
|
||||||
|
let mut bytes = b"LOCATION,Indre ".to_vec();
|
||||||
|
bytes.push(0xD8);
|
||||||
|
bytes.extend_from_slice(b"stfold,None,NOR,CERRA,x,59.58,11.16,1, 130");
|
||||||
|
assert_eq!(avkod(&bytes).split(',').nth(1), Some("Indre Østfold"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn gyldig_utf8_gaar_uendret_gjennom() {
|
||||||
|
assert_eq!(avkod("Indre Østfold".as_bytes()), "Indre Østfold");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -152,6 +152,9 @@ fn beregn(a: Beregn, kilde: &Datakilde) -> Result<()> {
|
|||||||
eprintln!("Rapport: {}", pdf.display());
|
eprintln!("Rapport: {}", pdf.display());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for m in &resultat.merknader {
|
||||||
|
eprintln!(" ! {m}");
|
||||||
|
}
|
||||||
skriv_sammendrag(&resultat, &scenarier);
|
skriv_sammendrag(&resultat, &scenarier);
|
||||||
eprintln!("Filer skrevet til {}", ut.display());
|
eprintln!("Filer skrevet til {}", ut.display());
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user